简单的Socket通信
Socket简介
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
服务端步骤:
• socket:创建服务器socket实例
• bind:绑定ip地址和端⼝
• listen:开始监听
• accept:接收客户端请求
• read:读取客户端传来的数据
• write:给客户端传数据
• close:关闭socket,结束通信
客户端步骤:
• socket:创建客户端socket实例
• connect:连接服务器
• read:读取客户端传来的数据
• write:给客户端传数据
• close:关闭socket,结束通信
这里我们实现一个同步方法的Socket通信
Socket实例
对于初学者来说,Socket可能很难理解,所以这里我们举一个简单的例子来模拟Socket通信的过程
首先,新建一个C#工程,引入我们需要的类库
using System;
using System.Net; //网络库
using System.Net.Sockets; //网络中的socket库
using System.Text; //文本处理库
using System.Threading; //多线程
那么,故事开始了,我新开了一家餐厅,餐厅有客户部用来接听客户的电话
//初始化服务器.
static void IniteServer()
{
//生产一个新的Socket作为server
Socket server = new Socket(AddressFamily.InterNetwork, //局域网.
SocketType.Stream, //流Socket.
ProtocolType.Tcp); //协议. //定义一个终端. IP地址相当去我们要注册的电话号码,客户打这个电话就可以联系到餐厅.
//后面的是端口号,其实就相当于是我们客户部的分机号码啦.
IPEndPoint _endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), ); //绑定终端.
server.Bind(_endPoint); //监听. 开始接收客户的电话.
server.Listen();
Console.WriteLine("Server is OK! Waiting for connected"); //重复接收客户端连接. 我们需要同时接听很多客户的电话对吧~
while (true)
{
//阻塞方法,线程休眠1.5s
Thread.Sleep(); //服务器上生成一个客户端来处理客户端的信息, 也就是如果有客户打电话过来,就找一个接线员来为这个客户服务.
Socket client = server.Accept();
Console.WriteLine ("Someone connected: " + client.LocalEndPoint.ToString()); //重复接收客户端的信息.
while (true) {
Thread.Sleep(); //接收信息的长度1kb
byte[] buffer = new byte[]; //接收的实际长度.
int lenght = client.Receive(buffer); //将接收到的二进制信息转换成字符串.
string msg = Encoding.Default.GetString(buffer, , lenght);
Console.WriteLine ("client: " + msg);
}
}
} public static void Main(string[] args)
{
//开启新线程来初始化服务器.
Thread newServer = new Thread(IniteServer); //开启线程.
newServer.Start();
}
服务端的代码大致上就算完成了,下面是客户端的,总体上差不多。。
public static void Main(string[] args)
{
Thread newClient = new Thread(() => {
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint _endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), ); //连接终端
client.Connect(_endPoint); while (true) { Thread.Sleep();
Console.WriteLine ("Please write a message:"); //阻塞方法,读取用户输入的信息.
string msg = Console.ReadLine(); //将信息转换为二进制,并发送信息.
byte[] buffer = Encoding.Default.GetBytes(msg);
client.Send(buffer); }
}); newClient.Start();
}
简单的服务器和客户端的通信就算完成了
左边是服务端,右边是客户端

简单的Socket通信的更多相关文章
- php简单实现socket通信
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
- Linux下简单的socket通信实例
Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...
- Android简单实现Socket通信,client连接server后,server向client发送文字数据
案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...
- Day 6-2简单的socket通信
什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面 ...
- Java实现简单的socket通信
今天学习了一下java如何实现socket通信,感觉难点反而是在io上,因为java对socket封装已经很完善了. 今天代码花了整个晚上调试,主要原因是io的flush问题和命令行下如何运行具有pa ...
- C#版 Socket编程(最简单的Socket通信功能)
示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...
- Java 实现简单的 Socket 通信
Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层.本文介绍了 Java socket 简单用法. 1. 传输层协议 传输层包含了两种协议,分别是 TCP (T ...
- 简单的Socket通信(简单的在线聊天)---winform
注:本博客适合刚开始学习winform程序的初学者,大牛请绕道(跪求大牛指导文中不足) .....10w字废话自动省略,直接开始正题. 首先从最基本的建立winform开始(本项目用的Vs2017) ...
- c# 实现简单的socket通信
服务端 using System.Net.Sockets; using System.Net; using System.Threading; namespace SocketServer { cla ...
随机推荐
- CHD 2015迎新杯题解
A.预防流感的拉面女神 简析:计算 n 的二进制表示里面 1 的个数 #include <cstdio> #include <cstring> #include <alg ...
- String.split()分割字符串
string.split(s[, sep[, maxsplit]]) Return a list of the words of the string s. If the optional secon ...
- ubuntu16.04 samba 配置
samba是一个很有用的在Linux和Windows之间共享文件的服务器程序,在工作的时候一直在使用,不过都是别人配置好的环境,自已一直没有配置过Samba服务器,今天尝试着自己配置的一次遇到了很多的 ...
- Python将列表中的string元素进行类型转换
例如 将 a=['1','2.0','3L'] 转换为 a=[1,2.0,3L] 只需 map(eval,['1','2.0','3L']) 即可 eval(expression[, globals[ ...
- PHP strtotime在linux服务器时间延迟8小时问题
今天客户反映有个功能投票模块第一天投了后,第二天就不能投了,理论上是第二天凌晨就可以再答题的,发现本地是正常的,linux服务器异常, 仔细查找原因发现是strtotime函数获取的值和本地获取的值不 ...
- etcd 集群搭建
现有三台机器 CentOS7 node1 10.2.0.10 node2 10.2.0.11 node3 10.2.0.12 1 源码解压命令行方式 node1 ./etcd --name infr ...
- 深入了解css3新特性
深入了解css3新特性:http://www.ibm.com/developerworks/cn/web/1202_zhouxiang_css3/
- windows中操作文件和目录的函数
1.文件操作函数 CreateFile();//创建或打开文件 ReadFile();//从文件读 WriteFile();//向文件写 SetFilePoi ...
- Chapter 20_1 table库
table库是由一些辅助函数构成,把table作为数组来操作,所有的函数都忽略传入参数的那张表中的非数字键. 无论如何,若一个操作需要取表的长度,这个表必须是一个真序列,或是拥有__len元方法. 提 ...
- Android服务
开启服务 (startservice) 服务一旦开启与调用者没有任何的关系 , 调用着的activity 即便是退出了 也不会影响 后台的service的运行. 在activity里面 不能去调用服务 ...