c#写个基础的Socket通讯
晚上想写点东西,想想把我刚来公司学的Sockt通讯写上来吧。要写的简单易懂点,新人们可以借鉴下哦,用控制台写。
先得说说Socket,与TCP/UDP啥关系,一直讲什么Socket通讯,TCP通讯,都被搞乱了,开始也搞不懂啥意思,引用网上大多数人讲的概念吧“Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。”我理解就是SOCKET是TCP、UDP的实现方式,用SOCKET编程可以实现TCP、UDP的通信。再通俗点,把Socket看成管子嘛,管子里传输液体或是固体,就是不同的协议嘛。
好,下面切入主题看代码,代码不长,应该好懂。
服务器端:
- static void Main(string[] args)
- {
- int recv;//用于表示客户端发送的信息长度
- byte[] data = new byte[];//用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组
- IPEndPoint ipep = new IPEndPoint(IPAddress.Any, );//本机预使用的IP和端口
- Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- newsock.Bind(ipep);//绑定
- newsock.Listen();//监听
- Console.WriteLine("waiting for a client");
- Socket client = newsock.Accept();//当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信
- IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
- Console.WriteLine("connect with client:" + clientip.Address + " at port:" + clientip.Port);
- string welcome = "welcome here!";
- data = Encoding.ASCII.GetBytes(welcome);
- client.Send(data, data.Length, SocketFlags.None);//发送信息
- try
- {
- while (true)
- {//用死循环来不断的从客户端获取信息
- data = new byte[];
- recv = client.Receive(data);
- Console.WriteLine("recv=" + recv);
- if (recv == )//当信息长度为0,说明客户端连接断开
- break;
- Console.WriteLine(Encoding.ASCII.GetString(data, , recv));
- client.Send(data, recv, SocketFlags.None);//发送信息
- }
- }
- catch
- {
- Console.WriteLine("Disconnected from" + clientip.Address);
- }
- client.Close();
- newsock.Close();
- }
客户端:
- static void Main(string[] args)
- {
- byte[] data = new byte[];
- Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- Console.Write("please input the server ip:");
- string ipadd = Console.ReadLine();
- Console.WriteLine();
- Console.Write("please input the server port:");
- int port = Convert.ToInt32(Console.ReadLine());
- IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);//服务器的IP和端口
- try
- {
- //因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。
- newclient.Connect(ie);
- }
- catch (SocketException e)
- {
- Console.WriteLine("unable to connect to server");
- Console.WriteLine(e.ToString());
- return;
- }
- newclient.Send(Encoding.Default.GetBytes("watchdog"));
- int recv = newclient.Receive(data);
- string stringdata = Encoding.ASCII.GetString(data, , recv);
- Console.WriteLine(stringdata);
- while (true)
- {
- string input = Console.ReadLine();
- if (input == "exit")
- break;
- newclient.Send(Encoding.ASCII.GetBytes(input));
- data = new byte[];
- recv = newclient.Receive(data);
- stringdata = Encoding.ASCII.GetString(data, , recv);
- Console.WriteLine(stringdata);
- }
- Console.WriteLine("disconnect from sercer");
- newclient.Shutdown(SocketShutdown.Both);
- newclient.Close();
- }
客户端运行图
先运行服务端,再运行客户端即可。这个程序麻雀虽小五脏俱全,还是很容易学习滴。延伸下去还可以做个简易聊天室。
c#写个基础的Socket通讯的更多相关文章
- 在windows下用C语言写socket通讯实例
原文:在windows下用C语言写socket通讯实例 From:Microsoft Dev Center #undef UNICODE #define WIN32_LEAN_AND_MEAN #in ...
- Java Socket通讯---网络基础
java socket 通讯 参考慕课网:http://www.imooc.com/learn/161 一.网络基础知识 1.1 通讯示意图 1.2 TCP/IP协议 TCP/IP是世界上应用最为广泛 ...
- 闲来无事,写个基于TCP协议的Socket通讯Demo
.Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...
- c# TCP Socket通讯基础
在做网络通讯方面的程序时,必不可少的是Socket通讯. 那么我们需要有一套既定的,简易的通讯流程. 如下: <pre name="code" class="csh ...
- 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...
- 高性能、高可用性Socket通讯库介绍 - 采用完成端口、历时多年调优!(附文件传输程序)
前言 本人从事编程开发十余年,因为工作关系,很早就接触socket通讯编程.常言道:人在压力下,才可能出非凡的成果.我从事的几个项目都涉及到通讯,为我研究通讯提供了平台,也带来了动力.处理socket ...
- python基础之socket编程 (转自林海峰老师)
python基础之socket编程 阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 ...
- 试解析Tomcat运行原理(一)--- socket通讯
关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...
随机推荐
- gcc 的visibility 使用
gcc 的visibility 使用(zz) -fvisibility=default|internal|hidden|protectedgcc的visibility是说,如果编译的时候用了这个属性, ...
- PHP如何让apache支持.htaccess 解决Internal Server Error The server …错误
TP框架 打开 www.newtp.com/index.php/Home/Index/abc出现 如下错误: Internal Server Error The server encountered ...
- linux系统垃圾清理
早上刚来,服务器出502错误了.我登上linux服务器,发现敲一个命令都提示没空间了, 用 df -h 查看了下 发现系统盘目录空间大小占用达到90%多,我觉得有些诧异, 难道是产生系统垃圾 然后用 ...
- linux系统下安装apache与tomcat
apache的安装 把安装包放到/soft 下 [root@localhost ~]#cd /soft [root@localhost soft]#tar jxvf httpd-2.2.25.tar. ...
- Spring框架:Spring容器具体解释
Spring容器 Spring容器能够帮助你管理所有的Bean对象.专业术语称之为IoC控制反转.在传统的程序中.对象的生成都是由开发人员完毕的.而在控制反转中,对象的生成所有都交给框架完毕.这种优点 ...
- SharePoint 2013 error The given assembly name or codebase System.ServiceModel.dll was invalid
笔者近期在 SharePoint 2013 的环境中遇到一个奇怪的问题,前一天 SharePoint 2013 站点还是好好的.可是突然站点就报page can't display 500 错误: T ...
- Java动态调用webService,axis2动态调用webService
Java动态调用webService axis2动态调用webService >>>>>>>>>>>>>>>& ...
- 多维数组遍历PHP
原文出处 <?php /* * ------------------------------------------------- * Author : nowamagic * Url : ww ...
- html不同文档类型支持的元素标签
- CI框架篇之模型篇--初识(1)
模型 模型是专门用来和数据库打交道的PHP类.例如,假设你想用CodeIgniter来做一个Blog. 你可以写一个模型类,里面包含插入.更新.删除Blog数据的方法. 下面的例子将向你展示一个普通的 ...