黑马程序员--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培训、期待与您交流! ----------------------
网络中的计算机实现通信的前提是知道对方的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培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员之c#学习笔记:C#学习小总结
- 黑马程序员_学习日记4_C#基础归纳总结之继承
- 黑马程序员—学习笔记C#之socket
- 黑马程序员之C#学习笔记: 抽象类总结
- 黑马程序员之C#学习笔记: Lambda表达式学习总结
- 黑马程序员_学习日记2_有关C#基础知识总结归纳之对象和类型
- 黑马程序员_C#面向过程学习总结1
- 黑马程序员_C#面向过程学习总结2
- 黑马程序员_C#面向对象学习知识总结2
- 黑马程序员_C#面向对象学习知识总结1
- 黑马程序员_学习日记5_C#基础归纳总结之派生类的构造函数
- 黑马程序员之c#程序学习笔记:c#程序经典例子学习总结
- 黑马程序员--c#学习总结(二)
- 黑马程序员-c#学习之Socket基础
- 黑马程序员之c#学习笔记:总结C#修饰符,成员修饰符和类修饰符
- 黑马程序员_学习日记6_C#基础归纳总结之堆栈分配图解
- 黑马程序员之C#学习笔记:最简单的三层架构学习总结
- 黑马程序员之C#学习笔记:StringBuilder字符串总结
- 黑马程序员_学习日记3_C#基础归纳总结之结构
- 黑马程序员_学习日记7_C#基础归纳总结之泛型