A19_Soket编程TCP协议通讯
来源:互联网 发布:算法工程师 年薪400 编辑:程序博客网 时间:2024/06/07 22:00
/* * Socket(套接字)编程 * 设备之间的识别依靠IP地址 * 设备中进程之间的是别的靠端口号 * TCP/IP协议 用于距离较远的,对精准度要求高的信息传输 * UDP协议用于距离较近,对信息精准度要求较低但要求速度快的信息传输 * * * **/using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;using System.Net;using System.Net.Sockets;namespace A18_SocketProgram{ class Server { private Socket _SockServer; //服务器监听套接字 private bool _IsListenContecion = true; //是否在监听(目的是方便退出) public Server() { Console.WriteLine("---------------服务端启动-----------------"); //定义网络终结点(封装IP与端口) IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),1000); //实例化套接字 _SockServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //服务器端绑定地址 _SockServer.Bind(endPoint); //开始监听 //....... _SockServer.Listen(10); //10表示服务器监听队列最大长度 try { while (_IsListenContecion) { //Accept()接收客户端的链接,这个方法会阻断当前线程的运行 Socket sockMsgServer = _SockServer.Accept(); Console.WriteLine("有一个客户端连接"); //开启后台线程进行与客户端的会话 Thread thClientMsg = new Thread(ClientMsg); thClientMsg.IsBackground = true; // 定义会话线程为后台线程。 thClientMsg.Name = "thClientMsg"; thClientMsg.Start(sockMsgServer); } } catch (Exception) { } } //服务器与客户端的通讯后台线程 [Obsolete("这个方法有瑕疵")] private void ClientMsgOld(object sockMsg) { Socket socketMsg = sockMsg as Socket; //通讯Socket //准备一个“数据缓存” while (true) { byte[] msgArray = new byte[1024 * 1024]; //1M空间 //接收客户端发来的数据,返回真实的长度 int trueClinetMsgLength = socketMsg.Receive(msgArray); //byte数组转String string strMsg = Encoding.UTF8.GetString(msgArray, 0, trueClinetMsgLength); //显示客户端发来的数据 Console.WriteLine("客户端发来的数据:" + strMsg); } } //服务器与客户端的通讯后台线程 private void ClientMsg(object sockMsg) { Socket socketMsg = sockMsg as Socket; //通讯Socket //准备一个“数据缓存” while (true) { byte[] msgArray = new byte[1024 * 1024]; //1M空间 //接收客户端发来的数据,返回真实的长度 int trueClinetMsgLength = socketMsg.Receive(msgArray); //byte数组转String string strMsg = Encoding.UTF8.GetString(msgArray,0,trueClinetMsgLength); //接到断开连接的信息 if (strMsg == "gm_exit") { Console.WriteLine("客户端断开连接"); break; } //显示客户端发来的数据 Console.WriteLine("客户端发来的数据:" + strMsg); } } static void Main(string[] args) { Server obj = new Server(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;using System.Net;using System.Net.Sockets;namespace A19_SocketdProgram_Client{ class Client { private Socket _SockClient; //客户端通讯套接字 private IPEndPoint serverEndPoint; //连接到的服务器IP与端口信息 public Client() { //通讯地址端口号 serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1000); //建立客户端的Sockte _SockClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { _SockClient.Connect(serverEndPoint); } catch (Exception) { } Console.WriteLine("连接服务器成功!!"); } //向服务器发送信息 [Obsolete("这个方法有瑕疵")] public void SendMsgOld() { while (true) { //输入信息 string strMsg = Console.ReadLine(); //退出 if (strMsg == "gm_exit") { break; } //字节转换 Byte[] byteArray = Encoding.UTF8.GetBytes(strMsg); //发送数据 _SockClient.Send(byteArray); Console.WriteLine("我: " + strMsg); } //关闭连接 _SockClient.Shutdown(SocketShutdown.Both); //清理连接的资源 _SockClient.Close(); } //向服务器发送信息 public void SendMsg() { while (true) { //输入信息 string strMsg = Console.ReadLine(); //字节转换 Byte[] byteArray = Encoding.UTF8.GetBytes(strMsg); //发送数据 _SockClient.Send(byteArray); //退出 if (strMsg == "gm_exit") { break; } Console.WriteLine("我: " + strMsg); } //关闭连接 _SockClient.Shutdown(SocketShutdown.Both); //清理连接的资源 _SockClient.Close(); } static void Main(string[] args) { Client obj = new Client(); obj.SendMsg(); //obj.SendMsg(); } }}
Server类和Client类分别在不同的启动项中
阅读全文
0 0
- A19_Soket编程TCP协议通讯
- socket编程 通讯协议tcp,数据承载协议http
- TCP协议通讯流程
- TCP协议通讯流程
- TCP协议通讯原理
- TCP协议通讯流程
- TCP通讯协议和UDP通讯协议
- TCP编程,Socket通讯
- TCP协议通讯工作原理
- TCP协议通讯工作原理
- TCP协议通讯工作原理
- tcp和udp通讯协议
- MODBUS通讯协议及编程
- MODBUS 通讯协议及编程
- MODBUS通讯协议及编程
- MODBUS通讯协议及编程
- MODBUS通讯协议及编程
- 加密通讯协议SSL编程
- Linux 文件权限
- java 代理模式
- C++ 变量作用域
- 优秀程序员都会关注的公众号
- 苹果公司发力区块链技术,未来系统将可创建和验证时间戳
- A19_Soket编程TCP协议通讯
- 互联网公司究竟如何落地技术驱动?
- 双12,你猜技术人会买什么
- Spring Boot干货系列:(一)优雅的入门篇
- 面试
- AI大潮来袭,Python将纳入高考?!你怎么看
- AI看电影看哭了...MIT科学家正在教AI感受电影中的喜怒哀乐
- 包云岗:关于RISC-V成为印度国家指令集的一些看法
- A20_Socket编程UDP协议通讯