黑马程序员--C#Socket学习总结
来源:互联网 发布:c语言规则引擎 编辑:程序博客网 时间:2024/05/16 06:16
---------------------- 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#Socket学习总结
- 黑马程序员_Objective-C中的ARC学习总结
- 黑马程序员 C语言---关于if switch学习总结
- 黑马程序员——C语言学习总结1-10
- 黑马程序员——C语言学习总结11-21
- 黑马程序员——C语言学习总结22-32
- 黑马程序员-c语言学习位运算总结
- 黑马程序员-C语言学习之指针总结
- 黑马程序员-objective-c学习总结
- [黑马程序员]08[C语言]数组部分学习总结
- 黑马程序员-IOS学习笔记(十一)C语言总结
- 黑马程序员-c#学习之Socket基础
- 黑马程序员--学习多线程和Socket小结
- 黑马程序员<.net学习---Socket套接字>
- 黑马程序员-基础知识学习总结
- 黑马程序员:IO学习总结
- 黑马程序员_Cookie学习总结
- [黑马程序员]多线程学习总结
- cocos2d UIScroll 冻结 addTimer:animationTimer timer 变慢官方解决方法
- 关于反向链接
- Linux源码编译(一):从头文件说起
- zz 导入项目R.java文件没有生成
- spring中commons-logging.jar的作用
- 黑马程序员--C#Socket学习总结
- Android找出弹状态栏广告的应用
- Spring MVC中 Json文件找不到
- 怎样成为一个卓越的技术人员
- 自定义view的基本思路与步骤(以radioButton为例)
- 博主:遇见未知的自己 (http://www.cnblogs.com)
- 一种基于ITIL的银行IT运维管理系统设计方法
- AlertDialog:Unable to add window -- token null is not for an application
- android输入法ImeOptions