您的位置:首页 > 职场人生

黑马程序员--C#Socket学习总结

2012-08-04 00:40 357 查看
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

网络中的计算机实现通信的前提是知道对方的IP地址和端口,然后建立通信通道最后通信,Socket就是建立计算机通信通道的类。

服务器端创建一个监听套接字调用Listen方法来监听客户端请求,浏览器(客户端)用已知的服务器IP地址和端口号创建请求套接字调用Connect方法来向服务器发送请求 (个人认为当客户端的套接字调用Connect方法的同时也将自己的IP和端口号传输给服务器),服务器监听到客户端的请求后会调用Accept重新生成一个新的套接字 ,然后用这个新的套接字与客户端的套接字进行通信,其中服务器接受客户端请求的方法Accept会一直等待客户端发送请求过来,客户端接收服务器消息的方法receiv会一直等服务器发来消息 ,即Accept方法与receiv方法会阻塞线程,因此会创建新线程来调用这两个方法。

C#程序实现客户端与服务器通信的代码如下:

服务器端程序:

Socket socketconn = null;//此套接字变量用来放监听套接字接受客户端请求后产生的一个新的套接字

//实例化一个TCP协议的套接字

WathchSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//假设服务器IP为:192.168.0.1,绑定端口号为:8899

IPAddress adress = IPAddress.Parse("192.168.0.1");

//创建服务器终端

IPEndPoint endpoint = new IPEndPoint(adress, 8899);

//绑定套接字终端

WathchSocket.Bind(endpoint);

//服务器开始监听

WathchSocket.Listen(10);

//创建一个新线程来处理客户端请求,若此处直接用WathchSocket.Accept(),则服务器端会一直等待客户端请求,应用程序会被阻塞

thread = new Thread(watchconnc);

thread.Start();

//处理客户端请求的方法watchconnc

void watchconnc()

{

while (true)//服务器端循环监听并处理客户端请求

{

socketconn = WathchSocket.Accept();

//创建一个接收客户端消息的方法

Thread receivethread = new Thread(receiv);

receivethread.Start();

}

}

//服务器端接收客户端消息的方法

private void receiv()

{

while (true)

{

byte[] recivemsg = new byte[1024 * 1024 * 2];

socketconn.Receive(recivemsg);

string remsg = System.Text.Encoding.UTF8.GetString(recivemsg);

textBox1.AppendText(remsg+"\r\n");
}

}

//服务器端向客户端发送消息

private void btsend_Click(object sender, EventArgs e)

{

string sendmsg = textmsg.Text.ToString().Trim();

byte[] arrysend = System.Text.Encoding.UTF8.GetBytes(sendmsg);

socketconn.Send(arrysend);

}

客户端程序:
Socket Clientsock = null;
Thread receivetthread = null;
//创建客户端套接字
Clientsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//客户端套接字Clientsock向服务器发送请求

Clientsock.Connect(IPAddress.Parse("192.168.0.1"), 8899);
//让线程receivetthread接收服务器发送来的消息

receivetthread = new Thread(receiv);

receivetthread.Start();

客户端接收服务器消息的方法

private void receiv()

{

while (true)//循环接收服务器端消息

{

byte[] recivemsg = new byte[1024 * 1024 * 2];

Clientsock.Receive(recivemsg);

string remsg = System.Text.Encoding.UTF8.GetString(recivemsg);

}

}

客户端向服务器发送消息

private void Cbtsend_Click(object sender, EventArgs e)

{

string sendmsg = textmsg.Text.ToString().Trim();

byte[] arrysend = System.Text.Encoding.UTF8.GetBytes(sendmsg);

Clientsock.Send(arrysend);

}

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: