程序截图
服务端
首先声明一个服务端的SOCKET 基于TCP的 并指定它要绑定的IP和端口
ServerSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse ("192.168.1.101");
ServerInfo = new IPEndPoint (ip,3001);
ServerSocket.Bind (ServerInfo);//将SOCKET接口和IP端口绑定
ServerSocket.Listen (10);//开始监听,并且挂起数为10
然后是开一个线程专门用来接收客户端的消息 和连接请求
ServerThread = new Thread (new ThreadStart (RecieveAccept));//将接受客户端连接的方法委托给线程
ServerThread.Start ();//线程开始运行
这里给每一个客户端起一个名字 并且用recieveCllback 进行接受到之后处理
private void RecieveAccept( )
{
while (true)
{
ClientSocket[ClientNumb] = ServerSocket.Accept ();
ClientSocket[ClientNumb].BeginReceive (MsgBuffer, 0, MsgBuffer.Length, SocketFlags.None,
new AsyncCallback (RecieveCallBack), ClientSocket[ClientNumb]);
lock (this.richTextBox1)
{
this.richTextBox1.Text+= (ClientSocket[ClientNumb].RemoteEndPoint.ToString () + " 成功连接服务器.");
}
ClientNumb++;
}
}
private void RecieveCallBack(IAsyncResult AR)
{
try
{
Socket RSocket = (Socket)AR.AsyncState;
int REnd = RSocket.EndReceive (AR);
//对每一个侦听的客户端端口信息进行接收和回发
for (int i = 0; i < ClientNumb; i++)
{
lock (this.richTextBox4)
{
this.richTextBox1.AppendText (Encoding.Unicode.GetString (MsgBuffer, 0, REnd));
}
//同时接收客户端回发的数据
RSocket.BeginReceive (MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback (RecieveCallBack), RSocket);
}
}
catch
{
}
}
发送数据
byte [] mm=new byte[100];
mm=Encoding.Unicode.GetBytes(richTextBox3.Text);
ClientSocket[i].Send (mm);
客户端
第一步连接服务器 serverinfo为IP和端口 然后开启异步接受数据 recieveCllback 1同理用来进行接受到之后的操作
ClientSocket1 = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ClientSocket1.Connect (ServerInfo);
ClientSocket1.BeginReceive (MsgBuffer1, 0, MsgBuffer.Length, SocketFlags.None, new AsyncCallback (ReceiveCallBack1), null);
private void ReceiveCallBack1(IAsyncResult AR)
{
try
{
int REnd = ClientSocket1.EndReceive (AR);
lock (this.richTextBox4)
{
this.richTextBox4.AppendText (Encoding.Unicode.GetString (MsgBuffer1, 0, REnd));
}
ClientSocket1.BeginReceive(MsgBuffer1, 0, MsgBuffer.Length, 0, new AsyncCallback (ReceiveCallBack1), null);
}
catch
{
MessageBox.Show ("已经与服务器断开连接!");
this.Close ();
}
}
客户端发送数据
MsgSend1 = Encoding.Unicode.GetBytes ( richTextBox2.Text );
if (ClientSocket1.Connected)
{
//将数据发送到连接的 System.Net.Sockets.Socket。
ClientSocket1.Send (MsgSend1);
}
else
{
MessageBox.Show ("当前与服务器断开连接,无法发送信息!");
}
CheckForIllegalCrossThreadCalls = false;