
服务器端:
Accept 以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的Socket。不能使用返回的这个 Socket 接受连接队列中的任何附加连接。然而,可以调用返回的 Socket 的RemoteEndPoint 方法来标识远程主机的网络地址和端口号。
在阻止模式中,Accept 将一直处于阻止状态,直到传入的连接尝试排入队列。连接被接受后,原来的 Socket 继续将传入的连接请求排入队列,直到您关闭它。
IPAddress ip = IPAddress.Parse(txtIp.Text.Trim());//得到IP地址
IPEndPoint endpoint=new IPEndPoint(ip,int.Parse(txtPort.Text.Trim()));IP端点(IP,端口号构建)
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);(负责监听的套接字)
//绑定到IP端点上面
socketWatch.Bind(endpoint);
//设置同时的最大队列数
socketWatch.Listen(10);
//下面为不断的监听并创建(负责通信的套接字),用线程来操作
Thread watch=null;
Dictionary<string,socket> dictsocket=new Dictionary<string,socket>();//用来记录客户端连接的IP端点,和服务器端与之通信的套接字
void Watch()
{
while(true)//不断的监听
{
Socket socketConnection=null;//负责通信的套接字
socketConnection=socketWatch.Accept();//负责
dictsocket.add(socketConnection.RemoteEndPoint.Tostring(),socketConnection);//放入到dict中
lblonline.Items.add(socketConnection.RemoteEndPoint.Tostring());//对新连接的客户端请求加入到在线列表中.
}
}
watch = new Thread(WacthConnection);
watch.IsBackground = true;
watch.Start();
ShowMsg("服务器启动成功");
//发送信息选择通过选择ListBox里面的值来操作
string title=txtTitle.Text.Trim();
byte[] bytedate=Encoding.UTF8.GetBytes(title);
if (lbonine.SelectedItem.ToString()!="")
{
dictsocket[lbonine.SelectedItem.ToString()].Send(bytedate);//传递byte[]
}