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通信的更多相关文章

  1. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  2. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  3. Android简单实现Socket通信,client连接server后,server向client发送文字数据

    案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...

  4. Day 6-2简单的socket通信

    什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面 ...

  5. Java实现简单的socket通信

    今天学习了一下java如何实现socket通信,感觉难点反而是在io上,因为java对socket封装已经很完善了. 今天代码花了整个晚上调试,主要原因是io的flush问题和命令行下如何运行具有pa ...

  6. C#版 Socket编程(最简单的Socket通信功能)

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

  7. Java 实现简单的 Socket 通信

    Java socket 封装了传输层的实现细节,开发人员可以基于 socket 实现应用层.本文介绍了 Java socket 简单用法. 1. 传输层协议 传输层包含了两种协议,分别是 TCP (T ...

  8. 简单的Socket通信(简单的在线聊天)---winform

    注:本博客适合刚开始学习winform程序的初学者,大牛请绕道(跪求大牛指导文中不足) .....10w字废话自动省略,直接开始正题. 首先从最基本的建立winform开始(本项目用的Vs2017) ...

  9. c# 实现简单的socket通信

    服务端 using System.Net.Sockets; using System.Net; using System.Threading; namespace SocketServer { cla ...

随机推荐

  1. 我是这样使用template.js来异步渲染数据的

    总监的代码用的是define+module.exports,为了效率先没去了解那一块,在github上找了一款功能单一的template.js来使用 https://github.com/yanhai ...

  2. SDN理解:目录

    为什么? 最近一直在学习SDN方面的知识,本着"最好的学习就是分享"的精神,记录下本系列的文章,尝试更好地去理解SDN这一正当红的技术. 如何? SDN领域现在已经充斥了大量的公司 ...

  3. Colorful Image Colorization 的环境配置

    原文链接:https://github.com/richzhang/colorization 步骤基本是按照Installation里的说明 1.安装依赖库 1.1Python相关库 Python l ...

  4. 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( ...

  5. Oracle与Sqlserver:Order by NULL值介绍

    针对页面传参到in的子集中去进行查询操作的话,就会有in(xxx,null),这样就会导致查询的结果中其实直接过滤掉了null,根本就查不出来null的值.之前对于null的操作都是进行不同数据库的n ...

  6. CODE[VS]-求和-整数处理-天梯青铜

    题目描述 Description 求n个数的和 输入描述 Input Description 第一行一个整数n 接下来一行n个整数 输出描述 Output Description 所有数的和 样例输入 ...

  7. sqlcipher for android

    github 地址 https://github.com/sqlcipher/android-database-sqlcipher 官网教程 https://www.zetetic.net/sqlci ...

  8. bind() unbind()绑定解绑事件

    .bind( eventType [, eventData], handler(eventObject)) 本文实例分析了JQuery中Bind()事件用法.分享给大家供大家参考.具体分析如下: .B ...

  9. 关于eclipse中代码与SVN服务器关联问题

    今天开始开发新项目,此项目采用maven搭建,分多个工程,用eclipse的SVN插件检出工程之后只有一个工程,只好用桌面端的SVN工具检出,然后再import导入到eclipse中直接变成了多个工程 ...

  10. IOS多线程加锁

    注意:加锁位置不同产生结果不同 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { / ...