上一篇已经实现了socket服务器,这次使用c#写一个socket网络客户端,实现消息收发功能,可以作为网络调试助手使用。界面如下:
首先填入服务器IP地址和端口号,点击connec进行连接,具体代码流程为创建一个socket,指定IP地址和端口号,使用connect函数进行连接,参考代码如下:
try
{
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(textBox1.Text);
IPEndPoint endpoint = new IPEndPoint(ip, int.Parse(textBox2.Text));
socketSend.Connect(endpoint);
showMsg("连接成功\r\n");
//开启一个线程接受服务器发来的信息
Thread th = new Thread(recMsgfromServer);
th.IsBackground = true;
th.Start();
}
catch
{ }
连接成功后,同步的方式为开启一个新线程来接收信息并处理,异步方式为调用异步函数,具体可以参考上一个服务器的文章。此客户端为同步方式,实现流程为,在接收线程里写一个死循环,不断接收信息。参考代码如下:
private void recMsgfromServer()
{
while (true)
{
byte[] receiveBuffer = new byte[1024];
int r = socketSend.Receive(receiveBuffer);
//如果为0,则跳出
if (r == 0) break;
//格式 client ip地址:消息
showMsg(socketSend.RemoteEndPoint.ToString() + ":" + Encoding.UTF8.GetString(receiveBuffer, 0, r ) + "\r\n");
}
}
发送信息,发送信息流程为拿到socket对象,调用send函数。需要注意的是,类型为byte[]类型。
private void button2_Click(object sender, EventArgs e)
{
string str = richTextBox2.Text;//从对话框获取消息
byte[] sendBuffer = new byte[str.Length];
sendBuffer =Encoding.UTF8.GetBytes(str);
socketSend.Send(sendBuffer);//发送信息
richTextBox2.Text=null;
}
reference: