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. Win32窗口

    #include <Windows.h> #include <CommCtrl.h> #pragma comment(lib, "comctl32.lib" ...

  2. November 12th 2016 Week 46th Saturday

    Never love anyone who treats you like you are ordinary. 请爱那些爱你的人. Don't waste your limited energy on ...

  3. vimtutor基础教程

    第一讲: 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键.         h (左移)       j (下行)       k (上行)     l (右移)  2. 欲 ...

  4. spring-事务实现原理

    spring事务的实现原理:aop. aop的两种实现方式: 1.动态代理: 事务方法与调用方法不能在同一个类中,否则事务不生效.解决方案,自己注入自己(实质注入的是代理类). 实现方式:jdk动态代 ...

  5. vue对比其他框架

    对比其他框架 React React 和 Vue 有许多相似之处,它们都有: 使用 Virtual DOM 提供了响应式(Reactive)和组件化(Composable)的视图组件. 将注意力集中保 ...

  6. Visual Studio下使用jQuery的10个技巧

    广泛流行的jQuery是一个开源的,跨浏览器和兼容CSS 3的JavaScript库,你可以用它简化你的JavaScript编码任务和操作(添加,编辑和删除)HTML内容中的DOM元素,本文介绍10个 ...

  7. MyEclipse2014拷贝web工程

    z哎myeclipse2014中,复制web项目 Ctrl+C复制原项目Ctrl+V粘贴并输入新的项目名称项目名 ---> 右键 ---> propertes ---> MyEcli ...

  8. Jquery 获取上传文件大小

    <input type="file" id="file1" /> <script> var size = $("#file1& ...

  9. LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)' method

    System.Data.Objects.EntityFunctions和System.Data.Objects.SqlClient.SqlFunctions中的方法进行比较,如下 where Syst ...

  10. 【小技巧】C#判断电脑是否联网

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...