一、服务端代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. namespace 网络编程.SockteHandel
  11. {
  12. /// <summary>
  13. /// 服务端处理类
  14. /// </summary>
  15. publicclassServerHandle
  16. {
  17. /// <summary>
  18. /// 端口号
  19. /// </summary>
  20. publicstaticstringPoint{ get;set;}
  21. /// <summary>
  22. /// IP地址
  23. /// </summary>
  24. publicstaticstringIpSite{ get;set;}
  25. /// <summary>
  26. /// 服务端信息
  27. /// </summary>
  28. publicstaticTextBoxServerMsg{ get;set;}
  29. /// <summary>
  30. /// 接收到客户端的消息
  31. /// </summary>
  32. publicstaticTextBoxReceiveMsg{ get;set;}
  33. /// <summary>
  34. /// 发送消息
  35. /// </summary>
  36. publicstaticTextBoxSendMessage{ get;set;}
  37. /// <summary>
  38. /// 负责通信的Socket
  39. /// </summary>
  40. privateSocketConnectionSocket;
  41. /// <summary>
  42. /// 监听端口
  43. /// </summary>
  44. publicvoidWatchPort()
  45. {
  46. //在服务器端创建一个负责监听ID跟端口号 的Socket
  47. Socket socketWatch =newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  48. //IPAddress ip = IPAddress.Any; //监听
  49. IPAddress ip =IPAddress.Parse(IpSite);
  50. //创建端口号对象
  51. IPEndPoint pointObj =newIPEndPoint(ip,Convert.ToInt32(Point));
  52. //监听
  53. socketWatch.Bind(pointObj);
  54. ServerMsg.Text+="监听成功······\r\n ";
  55. //设定最多十个排队连接请求
  56. socketWatch.Listen(10);
  57. //开启一个新线程
  58. Thread thread =newThread(Listen);
  59. thread.IsBackground=true;
  60. thread.Start(socketWatch);
  61. }
  62. /// <summary>
  63. /// 等待客户端连接,并且创建与之通信的Socket
  64. /// </summary>
  65. /// <param name="obj"></param>
  66. voidListen(object obj)
  67. {
  68. Socket soketlisten = obj asSocket;
  69. while(true)
  70. {
  71. //等待客户端连接,并创建一个负责通信的Socket
  72. Socket socketSend = soketlisten.Accept();
  73. ServerMsg.Text+="连接成功·······"+ socketSend.RemoteEndPoint.ToString()+"\r\n";
  74. //开启一个新线程不停接收客户端发来的消息
  75. Thread reciveThread =newThread(Recive);
  76. reciveThread.IsBackground=true;
  77. reciveThread.Start(socketSend);
  78. }
  79. }
  80. /// <summary>
  81. /// 服务器端不停接收客户端发来的消息
  82. /// </summary>
  83. /// <param name="obj"></param>
  84. voidRecive(object obj)
  85. {
  86. //接收消息
  87. ConnectionSocket= obj asSocket;
  88. if(ConnectionSocket==null)
  89. {
  90. return;
  91. }
  92. while(true)
  93. {
  94. //接收客户端发来信息
  95. byte[] buffer =newbyte[1024*1024*2];
  96. //实际接收的有效字节数
  97. int receiveIndex =ConnectionSocket.Receive(buffer);
  98. //以实际接收有效字节数来判断客户端是否下线了
  99. if(receiveIndex ==0)
  100. {
  101. break;
  102. }
  103. string str =Encoding.UTF8.GetString(buffer,0, buffer.Length);
  104. ReceiveMsg.Text+= str +"\r\n";
  105. }
  106. }
  107. /// <summary>
  108. /// 服务端发送消息
  109. /// </summary>
  110. publicvoidServerSendMessage()
  111. {
  112. byte[] buffer =Encoding.UTF8.GetBytes(SendMessage.Text);
  113. int connectionIndex =ConnectionSocket.Send(buffer);
  114. }
  115. }
  116. }

二、客户端代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Text;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. namespace 网络编程.SockteHandle
  11. {
  12. /// <summary>
  13. /// 客户端
  14. /// </summary>
  15. publicclassClientHandle
  16. {
  17. /// <summary>
  18. /// IP地址
  19. /// </summary>
  20. publicstaticstringConnectionIp{ get;set;}
  21. /// <summary>
  22. /// 端口号
  23. /// </summary>
  24. publicstaticstringPoint{ get;set;}
  25. //发送消息
  26. publicTextBoxSendMsg{ get;set;}
  27. /// <summary>
  28. /// 接收消息
  29. /// </summary>
  30. publicTextBoxReciveMsg{ get;set;}
  31. /// <summary>
  32. /// 客户端Socket对象
  33. /// </summary>
  34. publicSocket socketSend =null;
  35. /// <summary>
  36. /// 创建负责通信的Socket
  37. /// </summary>
  38. publicvoidCreateClientSocket()
  39. {
  40. socketSend =newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  41. IPAddress ip =IPAddress.Parse(ConnectionIp);
  42. IPEndPoint endPoint =newIPEndPoint(ip,Convert.ToInt32(Point));
  43. socketSend.Connect(endPoint);
  44. ReciveMsg.Text+="连接到服务器";
  45. //创建一个线程来接收服务器端数据
  46. Thread reciveThread =newThread(ReciveServerMessage);
  47. reciveThread.IsBackground=true;
  48. reciveThread.Start(socketSend);
  49. }
  50. /// <summary>
  51. /// 接收服务端信息
  52. /// </summary>
  53. voidReciveServerMessage(object obj)
  54. {
  55. Socket reciveSocket = obj asSocket;
  56. while(true)
  57. {
  58. byte[] buffer =newbyte[1024*1024*2];
  59. int reciveIndex = reciveSocket.Receive(buffer);
  60. if(reciveIndex ==0)
  61. {
  62. break;
  63. }
  64. ReciveMsg.Text+="\r\n"+Encoding.UTF8.GetString(buffer)+"\r\n";
  65. }
  66. }
  67. /// <summary>
  68. /// 发送消息
  69. /// </summary>
  70. publicvoidSendMessage()
  71. {
  72. byte[] buffer =Encoding.UTF8.GetBytes(SendMsg.Text);
  73. int sendIndex = socketSend.Send(buffer);
  74. }
  75. }
  76. }
 

C#中网络通信的更多相关文章

  1. RocketMq中网络通信之服务端

    一,Broker服务端入口(NettyServer端) 首先RocketMq网络通信采用的Netty通信.服务端主要集中在Broker中.我们先看一下Broker的启动类BrokerStartup 显 ...

  2. Linux中网络通信中 使用的结构体

    "+++++++++++++++++++++++++ Linux TCP/UDP通信中的结构体 +++++++++++++++++++++++++++++++++++++++" s ...

  3. java中网络通信 Scoket

    在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通 ...

  4. Linux下UPnP sample分析

        一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...

  5. python高级之网络编程

    python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...

  6. android考试题

    一.选择题 1. Math.round(11.5)等于多少(    ). Math.round(-11.5) 等于多少(   C  ). A.11 ,-11    B.11 ,-12 C.12 ,-1 ...

  7. 第六篇:python高级之网络编程

    python高级之网络编程   python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及 ...

  8. ZooKeeper 03 - ZooKeeper集群的脑裂问题 (Split Brain问题)

    目录 1 ZooKeeper的主从机制 2 什么是ZooKeeper的脑裂 2.1 脑裂现象的表现 2.2 为什么会出现脑裂 3 ZooKeeper如何解决"脑裂" 3.1 3种可 ...

  9. JAVA自学笔记26

    JAVA自学笔记26 1.网络编程 1)用来实现网络互联的不同计算机上运行的程序可以进行数据交换 2)网络模型一般泛指 OSI:(Open System Interconnection)开放系统互联参 ...

随机推荐

  1. 【转载】程序猿转型AI必须知道的几件事!

    历史上AI火过两次,但是最终都已销声匿迹作为结束.这次AI大火的原因:AlphaGo 4比1战胜李世石,相对于一些外行人的恐慌和恐惧,其实很多业内人员在这场世纪之战结束后,都为人类点上了一个大大的赞. ...

  2. C# 2.0新加特性

    泛型(Generics) 泛型是CLR 2.0中引入的最重要的新特性,使得可以在类.方法中对使用的类型进行参数化. 例如,这里定义了一个泛型类: class MyCollection<T> ...

  3. PhotoZoom放大图片,真的能无损吗?

    当然想要无损放大一张很小的图片时,总会有人会和你推荐PhotoZoom这款软件,那么它真的和说的一样,可以无损放大吗?下面小编挑了2张图片做了一下对比. 案例1,我们选取一张尺寸为200x200像素的 ...

  4. 'input propertychange' 当输入框文字改变时触发的事件!

    $('.amount_input').bind('input propertychange', function() { console.log(2); $('.list label').remove ...

  5. springboot-简介

    SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 下载地址: Spring Boot 主要目标是: 为所有 Spring ...

  6. Java什么时候用static,public,private,protected?

    这么说吧,假如你是一个类: public表示你愿意其他人看见你的物品(字段.属性),或者你愿意帮别人做事(方法): private表示你不愿意其他任何人看见你的私人物品,也不愿意帮任何人做事: pro ...

  7. shell问题-报错即退出

    如下: #!/bin/bash set -o errexit 在最开头加上 set -o errexit 即可(或者 set -e) 要关闭的时候 set +o errexit        (或者 ...

  8. python爬虫简单架构原理及示例

    网页下载器示例: # coding:utf-8 import urllib2 import cookielib url = "http://www.baidu.com" print ...

  9. 爬虫工具--Beautifusoup

    import requests from bs4 import BeautifulSoup s=requests.Session() r=s.get('https://www.tumblr.com/l ...

  10. k8s的概念

    Kubernetes(简称为 K8s),最初由 Google 的工程师开发和设计.Kubernetes 是用于自动部署.扩展和管理容器化应用程序的开源系统,它旨在提供跨主机集群的自动部署.扩展以及运行 ...