2023年8月3日发(作者:)
Socket长连接、短连接使⽤⽅法——附C#源码长连接和短连接在程序上基本没有区别,区别是短连接每次发送完消息都要调⽤Close()⽅法来释放资源,⽽长连接则不调⽤Close()⽅法,从⽽保持持续不断的通信功能。分为两个项⽬,⼀个Socket服务端和⼀个Socket客户端。结构如下:Socket长连接效果图如下,可以持续的发送消息,不需要重复链接:Socket服务端代码:using System;using c;using ;using ;using s;using ;using ing;using ;
namespace SocketServer{ class Program { static Socket socket = new Socket(etwork, , ); private static byte[] result = new byte[1024];
static void Main(string[] args) { SocketServie(); }
public static void SocketServie() { ine("服务端已启动"); string host = "127.0.0.1";//IP地址 int port = 2000;//端⼝ (new IPEndPoint((host), port)); (100);//设定最多100个排队连接请求
Thread myThread = new Thread(ListenClientConnect);//通过多线程监听客户端连接
(); ne(); }
///
/// 监听客户端连接
///
private static void ListenClientConnect() { while (true) { Socket clientSocket = (); (es("我是服务器")); Thread receiveThread = new Thread(ReceiveMessage); (clientSocket); } }
///
/// 接收消息
///
///
private static void ReceiveMessage(object clientSocket) { Socket myClientSocket = (Socket)clientSocket; while (true) { try try { //通过clientSocket接收数据
int receiveNumber = e(result); if (receiveNumber == 0) return; ine("接收客户端{0} 的消息:{1}", ng(), ing(result, 0, receiveNumber)); //给Client端返回信息 string sendStr = "已成功接到您发送的消息"; byte[] bs = es(sendStr);//es()不然中⽂会乱码 (bs, , 0); //返回信息给客户端 //(); //发送完数据关闭Socket并释放资源//长连接的话就不关闭 //ne(); } catch (Exception ex) { ine(e); ();//关闭Socket并释放资源 wn();//禁⽌发送和上传 break; } } } }}Socket客户端代码:代码中包含两个⽅法,分别是长连接和短连接⽅法。using System;using c;using ;using ;using s;using ;using ;
namespace SocketClient{ class Program { static void Main(string[] args) { //短连接 shotlink(""); //长连接 //longlink(); }
///
IPAddress ip = ("127.0.0.1"); Socket clientSocket = new Socket(etwork, , ); try { t(new IPEndPoint(ip, 2000)); //配置服务器IP与端⼝
ine("连接服务器成功"); } catch { ine("连接服务器失败,请按回车键退出!"); ne(); return; }
string sendMessage = "你好";//发送到服务端的内容 (es(sendMessage));//向服务器发送数据,需要发送中⽂则需要使⽤es(),否则会乱码 ine("向服务器发送消息:" + sendMessage);
//接受从服务器返回的信息 string recvStr = ""; byte[] recvBytes = new byte[1024]; int bytes; bytes = e(recvBytes, , 0); //从服务器端接受返回信息
recvStr += ing(recvBytes, 0, bytes); ine("服务端发来消息:{0}", recvStr);//回显服务器的返回信息 //每次完成通信后,关闭连接并释放资源 (); ne(); }
///
IPAddress ip = ("127.0.0.1"); Socket clientSocket = new Socket(etwork, , ); try { t(new IPEndPoint(ip, 2000)); //配置服务器IP与端⼝
ine("连接服务器成功"); } catch { ine("连接服务器失败,请按回车键退出!"); ne(); return; }
//循环读取输⼊数据 while (true) { ine("请输⼊"); string sentstr = ne(); SentMsg(sentstr, clientSocket); } }
///
//接受从服务器返回的信息 string recvStr = ""; byte[] recvBytes = new byte[1024]; int bytes; bytes = e(recvBytes, , 0); //从服务器端接受返回信息
recvStr += ing(recvBytes, 0, bytes); ine("服务端发来消息:{0}", recvStr); //回显服务器的返回信息 //();//关闭连接并释放资源//如果是长连接,注释掉close } } }}附⼀些学习链接:
2023年8月3日发(作者:)
Socket长连接、短连接使⽤⽅法——附C#源码长连接和短连接在程序上基本没有区别,区别是短连接每次发送完消息都要调⽤Close()⽅法来释放资源,⽽长连接则不调⽤Close()⽅法,从⽽保持持续不断的通信功能。分为两个项⽬,⼀个Socket服务端和⼀个Socket客户端。结构如下:Socket长连接效果图如下,可以持续的发送消息,不需要重复链接:Socket服务端代码:using System;using c;using ;using ;using s;using ;using ing;using ;
namespace SocketServer{ class Program { static Socket socket = new Socket(etwork, , ); private static byte[] result = new byte[1024];
static void Main(string[] args) { SocketServie(); }
public static void SocketServie() { ine("服务端已启动"); string host = "127.0.0.1";//IP地址 int port = 2000;//端⼝ (new IPEndPoint((host), port)); (100);//设定最多100个排队连接请求
Thread myThread = new Thread(ListenClientConnect);//通过多线程监听客户端连接
(); ne(); }
///
/// 监听客户端连接
///
private static void ListenClientConnect() { while (true) { Socket clientSocket = (); (es("我是服务器")); Thread receiveThread = new Thread(ReceiveMessage); (clientSocket); } }
///
/// 接收消息
///
///
private static void ReceiveMessage(object clientSocket) { Socket myClientSocket = (Socket)clientSocket; while (true) { try try { //通过clientSocket接收数据
int receiveNumber = e(result); if (receiveNumber == 0) return; ine("接收客户端{0} 的消息:{1}", ng(), ing(result, 0, receiveNumber)); //给Client端返回信息 string sendStr = "已成功接到您发送的消息"; byte[] bs = es(sendStr);//es()不然中⽂会乱码 (bs, , 0); //返回信息给客户端 //(); //发送完数据关闭Socket并释放资源//长连接的话就不关闭 //ne(); } catch (Exception ex) { ine(e); ();//关闭Socket并释放资源 wn();//禁⽌发送和上传 break; } } } }}Socket客户端代码:代码中包含两个⽅法,分别是长连接和短连接⽅法。using System;using c;using ;using ;using s;using ;using ;
namespace SocketClient{ class Program { static void Main(string[] args) { //短连接 shotlink(""); //长连接 //longlink(); }
///
IPAddress ip = ("127.0.0.1"); Socket clientSocket = new Socket(etwork, , ); try { t(new IPEndPoint(ip, 2000)); //配置服务器IP与端⼝
ine("连接服务器成功"); } catch { ine("连接服务器失败,请按回车键退出!"); ne(); return; }
string sendMessage = "你好";//发送到服务端的内容 (es(sendMessage));//向服务器发送数据,需要发送中⽂则需要使⽤es(),否则会乱码 ine("向服务器发送消息:" + sendMessage);
//接受从服务器返回的信息 string recvStr = ""; byte[] recvBytes = new byte[1024]; int bytes; bytes = e(recvBytes, , 0); //从服务器端接受返回信息
recvStr += ing(recvBytes, 0, bytes); ine("服务端发来消息:{0}", recvStr);//回显服务器的返回信息 //每次完成通信后,关闭连接并释放资源 (); ne(); }
///
IPAddress ip = ("127.0.0.1"); Socket clientSocket = new Socket(etwork, , ); try { t(new IPEndPoint(ip, 2000)); //配置服务器IP与端⼝
ine("连接服务器成功"); } catch { ine("连接服务器失败,请按回车键退出!"); ne(); return; }
//循环读取输⼊数据 while (true) { ine("请输⼊"); string sentstr = ne(); SentMsg(sentstr, clientSocket); } }
///
//接受从服务器返回的信息 string recvStr = ""; byte[] recvBytes = new byte[1024]; int bytes; bytes = e(recvBytes, , 0); //从服务器端接受返回信息
recvStr += ing(recvBytes, 0, bytes); ine("服务端发来消息:{0}", recvStr); //回显服务器的返回信息 //();//关闭连接并释放资源//如果是长连接,注释掉close } } }}附⼀些学习链接:
发布评论