C#建立TCP/IP连接

在C/S模式下做网络信号传输,使用TCP/IP协议是首选。
其传输机制:
首先服务端与客户端建立套接字(socket)连接,建立完套接字后,服务端与客户端通过套接字进行数据传输。通常服务端和客户端需要各开启一个线程进行数据的接收。

1.构建连接

首先服务端开启套接字监听服务,然后客户端根据服务器的IP、端口进行连接。

1.1服务端开启套接字

Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ip, myProt));  //绑定IP地址:端口
serverSocket.Listen(10);//设定最多10个排队连接请求  

注意在绑定IP时serverSocket.Bind(new IPEndPoint(ip, myProt));如果使用127.0.0.1时,客户端连接服务端的IP也必须是127.0.0.1,即要求服务端、客户端都在本地才可以通联。因此,需要将服务器套接字绑定的IP改为对外的IP,如192.168.0.1;
获取对外IP的方法为

/// <summary>/// 获取本地IP/// </summary>/// <returns></returns>private string GetAddressIP(){string AddressIP = string.Empty;foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList){if (_IPAddress.AddressFamily.ToString() == "InterNetwork"){AddressIP = _IPAddress.ToString();}}return AddressIP;}

1.2开启监听客户端连接的线程

new Thread(ListenClientConnect).Start(this);
/// <summary>
/// 监听客户端连接
/// </summary>
private static void ListenClientConnect(object server)
{Server myServer = (Server)server;myServer.clientSocket = serverSocket.Accept();//线程在此等待,直到有客户端连接后方继续执行myServer.clientSocket.Send(Encoding.UTF8.GetBytes("连接成功"));Thread receiveThread = new Thread(ReceiveMessage);//启动接收信息线程receiveThread.Start(server);
}

当serverSocket.Accept()执行后就完成了套接字的建立,就可以发送消息了。

1.3客户端建立与服务端的连接

客户端也定义一个套接字 clientSocket,再调用其connect方法与服务端连接。

    public bool createConn(){     try{IPAddress ip = IPAddress.Parse(textBox_serverIp.Text);clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);int connPort = Int16.Parse(textBox_serverPort.Text);clientSocket.Connect(new IPEndPoint(ip, connPort)); //配置服务器IP与端口  writeLog("连接服务器成功");button_createConn.Text = "断开连接";//开启监听线程receiveThread = new Thread(receiveMsg);receiveThread.Start(this);}catch (Exception e){writeLog("连接服务器失败" + e.ToString());return false;}return true;}

2.数据传输

2.1数据发送

服务端与客户端数据发送均是调用Socket进行传输。注意传输的数据需要进行编码Encoding.UTF8.GetBytes()

    /// <summary>/// 发送消息/// </summary>/// <param name="signal"></param>/// <returns></returns>private bool sendSignal(string signal){if (clientSocket == null){writeLog("发送失败,未连接客户端");return false;}try{clientSocket.Send(Encoding.UTF8.GetBytes(signal + "。"));return true;}catch (Exception e){writeLog("发送失败" + e.ToString());clientSocket = null;}return false;}

2.2数据接收

数据的接收建议开启一个新的线程进行接收,接收是通过调用socket的Receive方法实现的。

 new Thread(receiveMsg).Start(this);/// <summary>/// 接受消息处理线程/// </summary>/// <param name="clientForm"></param>public static void receiveMsg(object clientForm){Client myClient = (Client)clientForm;byte[] result = new byte[1024];while (true){try{//通过clientSocket接收数据  int receiveLength = myClient.clientSocket.Receive(result);string resultStr = Encoding.UTF8.GetString(result, 0, receiveLength);myClient.writeLog(string.Format("接收服务器消息:{0}", resultStr));     }catch (Exception e){myClient.writeLog("读取数据失败,服务器可能已经断开" + e.ToString());Thread.Sleep(300);myClient.closeConn();       }   }   }

3.关闭连接

想套接字发送关闭的信号后,将本地套接字关闭

    clientSocket.Shutdown(SocketShutdown.Both);myServer.clientSocket.Close();

4.点击下载例程

C#建立TCP/IP连接相关推荐

  1. SIM7600X 获取GPS信号 TCP/IP连接与PPP拨号上网 4G上网

    如果设备是基于Ubuntu.树莓派等,参考:https://www.cnblogs.com/little-kwy/p/11296426.html 用户在使用模块前除了micro USB线.LTE天线. ...

  2. SYN(用于TCP/IP连接,即建立连接时的第一个包)

    SYN用于建立TCP/IP时的握手连接,由客户端想服务端发送SYN,服务端向客户端发送SYN+ACK响应报文,客户端向服务端发送一个ACK响应报文,然后建立一个完整的连接,即三次握手 SYN攻击属于D ...

  3. Cisco测试命令和TCP/IP连接故障处理

    Cisco测试命令和TCP/IP连接故障处理 一.故障处理命令 1.show命令: 1) 全局命令: show version :显示系统硬件和软件版本.DRAM.Flash show startup ...

  4. mysql服务器是否支持tcp/ip连接,(3)MySQL客户端与服务端的TCP/IP及socket连接方式-Go语言中文社区...

    MySQL客户端与服务端的TCP/IP及socket连接方式 客户端与服务器模型 客户端与服务端模型 TCP/IP方式连接 解释说明 TCP/IP套接字方式是MySQL在任何平台下都提供的连接方式,也 ...

  5. Cisco测试命令和TCP/IP连接故障处理整理集合

    Cisco测试命令和TCP/IP连接故障处理 一.故障处理命令 1.show命令: 1) 全局命令: show version :显示系统硬件和软件版本.DRAM.Flash show startup ...

  6. 基于软件定义无线电的实时频谱分析仪设备连接方法(一)简单2端口TCP/IP连接

    TCP/IP传输协议 TCP/IP传输协议,即传输控制/网络协议,也称为网络通讯协议,是在网络使用中的最基本的通信协议.TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定,并且它是保证 ...

  7. Python攻防-Socket通信建立TCP反向连接

    文章目录 前言 远程控制 脚本编写 效果演示 脚本优化 getopt () 完整代码 效果演示 前言 本文将记录学习基于 Socket 通信机制建立 TCP 反向连接,借助 Python 脚本实现主机 ...

  8. Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败...

    2019独角兽企业重金招聘Python工程师标准>>> 错误原因如下: Exception in thread "main" org.hibernate.exce ...

  9. jdbc连接数据库失败,com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。

    创建数据库连接失败! com.microsoft.sqlserver.jdbc.SQLServerException: 到主机  的 TCP/IP 连接失败. java.net.ConnectExce ...

最新文章

  1. hugo采用gitalk添加留言功能
  2. python的列表的remove()方法、判断if xxx in xx条件比较耗时问题
  3. 如何设计区块链项目的通证(token)模型
  4. 查看Redis集群所有节点内存工具
  5. SAP License:ERP横向集中部署还是纵向集中部署
  6. 【报告分享】2020年上半年中国直播电商行业发展分析报告.pdf(附下载链接)...
  7. 如何查看 Windows10 版本号
  8. 3Dmax和SketchUp有什么区别
  9. 2018 华为软件精英挑战赛
  10. 国内主流的大数据平台厂商有哪些?
  11. Excel 2010同时打开2个或多个独立窗口
  12. 调用摄像头接口方法合集
  13. 保姆级教程:手把手教你搭建个人网站
  14. msysgit - Windows Git安装配置
  15. 科大讯飞语音离线命令识别
  16. steam网络游戏加速技术,针对任何联网进程或者游戏代理加速都行。
  17. WHU 1572 Cyy and Fzz (AC自动机 dp )
  18. 计算机维修套装推荐,工欲善其事,必先利其器---iFixit 54 Bit Driver Kit 维修工具套装...
  19. Problem1: Magic Square
  20. 影视列表(20211117更新)

热门文章

  1. 多线程和单线程执行效率比较
  2. 服务器自定义怪,饥荒联机服务器-自定义世界设置
  3. lxd linux系统视频教程,如何在 Linux 启动时自动启动 LXD 容器
  4. java判断是否能组成三角形
  5. PCL学习记录---pcd_wirte
  6. 生信入门(六)——单细胞分析(Seurat)
  7. java8 stream().map().collect()的Collectors.toList()、Collectors.toMap()、Collectors.groupingBy()的
  8. C++基础算法教程|文件操作
  9. 杨桃的Python基础教程——第1章:Python简介
  10. web 阿里矢量图标