今天刚把基础的socket部分视频看完结尾处老师留了个作业是添加客户端和服务端发送消息的作业就做了一下
客户端在原来老师基础上加了这几行代码
//客户端发送消息
string msg = txtSendMsg.Text.Trim();
byte[] by = System.Text.Encoding.UTF8.GetBytes(msg);
//调用socket的Send 方法发送消息
socketSend.Send(by);
ShowMsg("发送了数据:" + msg);
服务端在原来基础上加了:
负责监听的方法改为
//负责监听方法
void WatchClient()
{
while (true)//持续监听客户端请求
{
//监听到的访问 注意accept方法会阻断当前线程 知道监听成功
Socket socketConnection = watchSocket.Accept();//一旦监听到客户端请求,就返回一个负责和该客户端通信的套接字
Thread thRec = new Thread(ReClientMsg);//创建一个负责监听接收消息的线程
thRec.IsBackground = true;//设置为后台程序
thRec.Start(socketConnection);//将监听到的socket作为参数传入并开启线程
dir.Add(socketConnection.RemoteEndPoint.ToString(),socketConnection);
listUsers.Items.Add(socketConnection.RemoteEndPoint.ToString());
ShowMsg("客户端连接成功!"+socketConnection.RemoteEndPoint.ToString());
}
}
添加了一个接受客户端发送消息的方法 作为线程方法名称为ReClientMsg
/// <summary>
/// 服务端接收客户端发送消息
/// </summary>
void ReClientMsg(object soc)
{
Socket socketSend = soc as Socket;
//创建一个2m的缓存区用于接收用
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
//将接收到的数据存入arrMsgRec 并返回接收到的真正数据的长度
int count = socketSend.Receive(arrMsgRec);
string strRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, count);
ShowMsg("接收到消息为:" + strRec);
} |