【分享】服务器端向客户端发送消息,客户端接收消息
//通过IP地址和端口创建网络节点对象
IPAddress address=IPAddress.Parse(服务器Ip地址);
IPEndPoint endpoint=new IPEndPoint(address,int.Parse(端口));
//创建一个套接字(工具,固定代码)
Socket socketWatch =new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//将套接字绑定到唯一的网络节点上
socketWatch.Bind(endpoint);
//设置监听队列长度
socketWatch.Listen(10);
//创建一个Dictory<string,Socket> 用来存储所有与服务器通信的套接字
Dictory<string,Socket> dic=new Dictory<string,Socket>;
//通过线程为每一个与之连接的客服端分配一个Socket对象:
Thread threadWatch=new Thread(WatchConnecting);//创建负责监听的线程,并传入监听方法
threadWatch.IsBackground=true;//设置为后台线程
threadWatch.Start();//开启线程
//获取与要发送信息的客户端套接字,并调用方法发送消息
string strMsg="要发送的消息";
byte[] arrMsg=System.Text.Encoding.UTF8.GetBytes(strMsg);
dic[lbOnline.Text].Send(arrMsg);//从lbOnline控件中取得网络节点信息,并从套接字集合里获得客户端套接字
//创建监听方法
void WatchConnecting()
{
while(true)
{
//开始监听,一旦监听到客户端的连接请求,就分配一个与之对应的通信套接字
Socket sokConnection=socketWatch.Accept();
//将每一个通信套接字存入Dictory<string,Socket> dic
dic.Add(sokConnection.RemoteEndPoint.ToString(),socketWatch);
//将sokConnection的客户端网络节点保存到一个容器里面,假设有一个listBox lbOnline
lbOnline.Items.Add(sokConnection.RemoteEndPoint.ToString());
MessageBox.showDialog("有新的客户端成功连接!");
}
|