c# Socket编程
—— 学习Socket笔记(简易的客服端和客户端交接)
-
Socket一般应用模式(服务器端和客户端)
—— 服务器端的Socket(至少需要两个)
- 一个负责接收客户端连接请求(但不负责与客户端通信),每成功接收到客户端的连接便在服务器端产生一个对应的复杂通信的Socket(最好是用一个list存储然后管理起来)
- 在接收到客户端连接时创建,为每个连接成功的客户端请求在服务器端都创建一个对应的Socket(负责和客户端通信)
——客户端的Socket
- 必须指定要连接的服务器地址和端口,通过创建一个Socket对象来初始化一个到服务器端的TCP连接/UDP链接(看服务端是建立什么链接的)
class ServerManager
{
static List<Client> clientList=new List<Client>();
static void Main(string[] args)
{
//绑定ip和端口号
Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.43.36"), 7788));
Console.WriteLine("server is running");
//开始监听
tcpServer.Listen(100);
while(true)
{
Socket socketClient = tcpServer.Accept();
Console.WriteLine("a client is conneting");
Client client = new Client(socketClient);
clientList.Add(client);
}
}
}
- Client.cs就是负责和客户端通信
class Client
{
private Socket socketClient;
private Thread t;
private byte[] data = new byte[1024];
public Client(Socket s)
{
socketClient = s;
//开一个线程来接受信息
t = new Thread(ReceiveMessage);
t.Start();
}
//接受信息的线程入口
private void ReceiveMessage()
{
while(true)
{
int length=socketClient.Receive(data);
string message = Encoding.UTF8.GetString(data);
}
}
}
public class SocketClient : MonoBehaviour {
private string ipAdress = "192.168.43.36";
private int port = 7788;
private Socket socketClient;
void Start () {
ConnetToServer();
}
void ConnetToServer()
{
socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketClient.Connect(new IPEndPoint(IPAddress.Parse(ipAdress), port));
}
//发送消息的方法体
void SendMessage(string message)
{
byte[] data = Encoding.UTF8.GetBytes(message);
socketClient.Send(data);
}
}