简单的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 ...
随机推荐
- 我是这样使用template.js来异步渲染数据的
总监的代码用的是define+module.exports,为了效率先没去了解那一块,在github上找了一款功能单一的template.js来使用 https://github.com/yanhai ...
- SDN理解:目录
为什么? 最近一直在学习SDN方面的知识,本着"最好的学习就是分享"的精神,记录下本系列的文章,尝试更好地去理解SDN这一正当红的技术. 如何? SDN领域现在已经充斥了大量的公司 ...
- Colorful Image Colorization 的环境配置
原文链接:https://github.com/richzhang/colorization 步骤基本是按照Installation里的说明 1.安装依赖库 1.1Python相关库 Python l ...
- mysql版本,根据经纬度定位排序sql
SELECT id,lng,lat,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((lat1*PI()/180-lat*PI()/180)/2),2)+COS(lat1*PI( ...
- Oracle与Sqlserver:Order by NULL值介绍
针对页面传参到in的子集中去进行查询操作的话,就会有in(xxx,null),这样就会导致查询的结果中其实直接过滤掉了null,根本就查不出来null的值.之前对于null的操作都是进行不同数据库的n ...
- CODE[VS]-求和-整数处理-天梯青铜
题目描述 Description 求n个数的和 输入描述 Input Description 第一行一个整数n 接下来一行n个整数 输出描述 Output Description 所有数的和 样例输入 ...
- sqlcipher for android
github 地址 https://github.com/sqlcipher/android-database-sqlcipher 官网教程 https://www.zetetic.net/sqlci ...
- bind() unbind()绑定解绑事件
.bind( eventType [, eventData], handler(eventObject)) 本文实例分析了JQuery中Bind()事件用法.分享给大家供大家参考.具体分析如下: .B ...
- 关于eclipse中代码与SVN服务器关联问题
今天开始开发新项目,此项目采用maven搭建,分多个工程,用eclipse的SVN插件检出工程之后只有一个工程,只好用桌面端的SVN工具检出,然后再import导入到eclipse中直接变成了多个工程 ...
- IOS多线程加锁
注意:加锁位置不同产生结果不同 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { / ...