unity socket通信服務器端程序< >


 

using System;
using System.Net;
using System.Net.Sockets;

class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
//創建一個套接字,三個參數分別代表地址族,套接字類型和協議
Socket listenfd = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
//根據IP地址創建IPAddress對象
IPAddress ipAdr = IPAddress.Parse("127.0.0.1");

//用IPAddress指定的地址和端口初始化;
IPEndPoint ipEp = new IPEndPoint(ipAdr, 1234);

//給套接字綁定IP和端口
listenfd.Bind(ipEp);
//開始監聽,等待客戶端連接;
listenfd.Listen(0);
Console.WriteLine("[服務器]啟動成功");
while (true)
{
//Accept
Socket connfd = listenfd.Accept();
Console.WriteLine("[服務器]Accept");
//Recv
byte[] readBuff = new byte[1024];
int count = connfd.Receive(readBuff);
string str = System.Text.Encoding.UTF8.GetString(readBuff, 0, count);
Console.WriteLine("[服務器接收]" + str);
//Send
byte[] bytes = System.Text.Encoding.Default.GetBytes("serv echo " + str);
connfd.Send(bytes);
}
}
}

 

 

服務端要處理多個客戶端消息,它需要一個數組來維護所有客戶端的連接,每個客戶端都有自己的Socket和緩沖區,在服務端添加Conn類。

 

using System;
using System.Net;
using System.Net.Sockets;
using System.Collections;
using System.Collections.Generic;

 

public class Conn
{
//常量
public const int BUFFER_SIZE = 1024;
//Socket
public Socket socket;
//是否使用
public bool isUse = false;
//Buff
public byte[] readBuff = new byte[BUFFER_SIZE];
public int buffCount = 0;
//構造函數
public Conn()
{
readBuff = new byte[BUFFER_SIZE];
}
//初始化
public void Init(Socket socket)
{
this.socket = socket;
isUse = true;
buffCount = 0;
}
//緩沖區剩余的字節數
public int BuffRemain()
{
return BUFFER_SIZE - buffCount;
}
//獲取客戶端地址
public string GetAdress()
{
if (!isUse)
return "無法獲取地址";
return socket.RemoteEndPoint.ToString();
}
//關閉
public void Close()
{
if (!isUse)
return;

Console.WriteLine("[斷開鏈接]" + GetAdress());
socket.Close();
isUse = false;
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM