C#中网络通信
一、服务端代码
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace 网络编程.SockteHandel{/// <summary>/// 服务端处理类/// </summary>publicclassServerHandle{/// <summary>/// 端口号/// </summary>publicstaticstringPoint{ get;set;}/// <summary>/// IP地址/// </summary>publicstaticstringIpSite{ get;set;}/// <summary>/// 服务端信息/// </summary>publicstaticTextBoxServerMsg{ get;set;}/// <summary>/// 接收到客户端的消息/// </summary>publicstaticTextBoxReceiveMsg{ get;set;}/// <summary>/// 发送消息/// </summary>publicstaticTextBoxSendMessage{ get;set;}/// <summary>/// 负责通信的Socket/// </summary>privateSocketConnectionSocket;/// <summary>/// 监听端口/// </summary>publicvoidWatchPort(){//在服务器端创建一个负责监听ID跟端口号 的SocketSocket socketWatch =newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//IPAddress ip = IPAddress.Any; //监听IPAddress ip =IPAddress.Parse(IpSite);//创建端口号对象IPEndPoint pointObj =newIPEndPoint(ip,Convert.ToInt32(Point));//监听socketWatch.Bind(pointObj);ServerMsg.Text+="监听成功······\r\n ";//设定最多十个排队连接请求socketWatch.Listen(10);//开启一个新线程Thread thread =newThread(Listen);thread.IsBackground=true;thread.Start(socketWatch);}/// <summary>/// 等待客户端连接,并且创建与之通信的Socket/// </summary>/// <param name="obj"></param>voidListen(object obj){Socket soketlisten = obj asSocket;while(true){//等待客户端连接,并创建一个负责通信的SocketSocket socketSend = soketlisten.Accept();ServerMsg.Text+="连接成功·······"+ socketSend.RemoteEndPoint.ToString()+"\r\n";//开启一个新线程不停接收客户端发来的消息Thread reciveThread =newThread(Recive);reciveThread.IsBackground=true;reciveThread.Start(socketSend);}}/// <summary>/// 服务器端不停接收客户端发来的消息/// </summary>/// <param name="obj"></param>voidRecive(object obj){//接收消息ConnectionSocket= obj asSocket;if(ConnectionSocket==null){return;}while(true){//接收客户端发来信息byte[] buffer =newbyte[1024*1024*2];//实际接收的有效字节数int receiveIndex =ConnectionSocket.Receive(buffer);//以实际接收有效字节数来判断客户端是否下线了if(receiveIndex ==0){break;}string str =Encoding.UTF8.GetString(buffer,0, buffer.Length);ReceiveMsg.Text+= str +"\r\n";}}/// <summary>/// 服务端发送消息/// </summary>publicvoidServerSendMessage(){byte[] buffer =Encoding.UTF8.GetBytes(SendMessage.Text);int connectionIndex =ConnectionSocket.Send(buffer);}}}
二、客户端代码
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace 网络编程.SockteHandle{/// <summary>/// 客户端/// </summary>publicclassClientHandle{/// <summary>/// IP地址/// </summary>publicstaticstringConnectionIp{ get;set;}/// <summary>/// 端口号/// </summary>publicstaticstringPoint{ get;set;}//发送消息publicTextBoxSendMsg{ get;set;}/// <summary>/// 接收消息/// </summary>publicTextBoxReciveMsg{ get;set;}/// <summary>/// 客户端Socket对象/// </summary>publicSocket socketSend =null;/// <summary>/// 创建负责通信的Socket/// </summary>publicvoidCreateClientSocket(){socketSend =newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddress ip =IPAddress.Parse(ConnectionIp);IPEndPoint endPoint =newIPEndPoint(ip,Convert.ToInt32(Point));socketSend.Connect(endPoint);ReciveMsg.Text+="连接到服务器";//创建一个线程来接收服务器端数据Thread reciveThread =newThread(ReciveServerMessage);reciveThread.IsBackground=true;reciveThread.Start(socketSend);}/// <summary>/// 接收服务端信息/// </summary>voidReciveServerMessage(object obj){Socket reciveSocket = obj asSocket;while(true){byte[] buffer =newbyte[1024*1024*2];int reciveIndex = reciveSocket.Receive(buffer);if(reciveIndex ==0){break;}ReciveMsg.Text+="\r\n"+Encoding.UTF8.GetString(buffer)+"\r\n";}}/// <summary>/// 发送消息/// </summary>publicvoidSendMessage(){byte[] buffer =Encoding.UTF8.GetBytes(SendMsg.Text);int sendIndex = socketSend.Send(buffer);}}}
C#中网络通信的更多相关文章
- RocketMq中网络通信之服务端
一,Broker服务端入口(NettyServer端) 首先RocketMq网络通信采用的Netty通信.服务端主要集中在Broker中.我们先看一下Broker的启动类BrokerStartup 显 ...
- Linux中网络通信中 使用的结构体
"+++++++++++++++++++++++++ Linux TCP/UDP通信中的结构体 +++++++++++++++++++++++++++++++++++++++" s ...
- java中网络通信 Scoket
在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通 ...
- Linux下UPnP sample分析
一.UPnP简介 UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...
- python高级之网络编程
python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...
- android考试题
一.选择题 1. Math.round(11.5)等于多少( ). Math.round(-11.5) 等于多少( C ). A.11 ,-11 B.11 ,-12 C.12 ,-1 ...
- 第六篇:python高级之网络编程
python高级之网络编程 python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及 ...
- ZooKeeper 03 - ZooKeeper集群的脑裂问题 (Split Brain问题)
目录 1 ZooKeeper的主从机制 2 什么是ZooKeeper的脑裂 2.1 脑裂现象的表现 2.2 为什么会出现脑裂 3 ZooKeeper如何解决"脑裂" 3.1 3种可 ...
- JAVA自学笔记26
JAVA自学笔记26 1.网络编程 1)用来实现网络互联的不同计算机上运行的程序可以进行数据交换 2)网络模型一般泛指 OSI:(Open System Interconnection)开放系统互联参 ...
随机推荐
- Redhat/CentOS xfs文件系统及磁盘挂载
#!/bin/sh #DEVICE_LIST=""DEVICE_LIST="/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /d ...
- outlook导入配置文件
公司入.离职人员越来越多,所以产生了一个自动化配置邮件的想法 查看了一下资料,outlook有导入配置文件的方法可用. 利用otc工具,打开office2010的安装文件夹,执行setup.exe / ...
- Java数组的运用
Java数组 应用1: 大乐透彩票模拟器: 规则: 前区01-35中随机生成5个号码 后区01-12中随机生成2个号码 模拟操作,系统自动生成号码组合,并且按从小到大的顺序输出结果 同时要求可以选择生 ...
- CSS text-transform 属性 控制控制文本的大小写
值 描述 none 默认.定义带有小写字母和大写字母的标准的文本. capitalize 文本中的每个单词以大写字母开头. uppercase 定义仅有大写字母. lowercase 定义无大写字母, ...
- DAO DTO VO BO
DAO叫数据访问对象DTO是数据传输对象DAO通常是将非对象数据(如关系数据库中的数据)以对象的方式操纵.DTO通常用于不同层(UI层.服务层或者域模型层)直接的数据传输,以隔离不同层,降低层间耦合 ...
- python与php生成二维码对比
php生成二维码 include 引入的库单独下载 <?php header("Content-type:text/html;charset=utf-8"); error_r ...
- PART 5: INTEGRATING SPRING SECURITY WITH SPRING BOOT WEB
转自:http://justinrodenbostel.com/2014/05/30/part-5-integrating-spring-security-with-spring-boot-web/ ...
- P1085 不高兴的津津
... 题目描述 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞蹈和钢琴.但是津津如果一天上课超过八个小时就会不 ...
- 基于Tags的简单内容推荐的实现
原来为了简单方便,自己小网站上的文章页的相关内容推荐就是从数据库里随机抽取数据来填充一个列表,所以一点相关性都没有,更本没有办法引导用户去访问推荐内容. 算法选择 如何能做到相似内容的推荐呢,碍于小网 ...
- 【CodeForces 574B】Bear and Three Musketeers
[链接] 我是链接,点我呀:) [题意] [题解] 枚举每一条边(x,y) 然后再枚举y的出度z 看看g[x][z]是否等于1(表示联通) 如果等于1就说明找到了一个三元环,则尝试用它们的出度和-6更 ...