简单的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 ...
随机推荐
- tuple 可更改的列表和不可更改的元组
tuple([iterable]) Return a tuple whose items are the same and in the same order as iterable's items. ...
- ecshop3.0.0注入
配个环境来演示给别人看..分析一下.flow.php文件缺陷,order_id在post请求没有单引号保护.造成注入 <?php elseif ($_REQUEST['step'] == 're ...
- vue+vuex初入门
Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 解决问题: 传参的方法对于多层嵌 ...
- 手动为maven的本地仓库添加JAR
在要添加的jar所在的文件夹下打开黑屏 如添加Oracle的ojdbc6.jar 输入: mvn install:install-file -DgroupId=com.oracle -Dartifac ...
- UltimateDefrag磁盘碎片整理软件 v3.0.100.19汉化版
软件名称:UltimateDefrag磁盘碎片整理软件 v3.0.100.19汉化版软件类别:汉化软件运行环境:Windows软件语言:简体中文授权方式:免费版软件大小:3.25 MB软件等级:整理时 ...
- LeetCode 328. Odd Even Linked List C#
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- maven中添加proguard来混淆代码
只要下回插件并添加相应的配置文件即可.本文仅是做下相关记录 1.修改pom.xml添加插件 <plugin> <groupId>com.pyx4me</groupId&g ...
- python setup.py install 报错ImportError: No module named setuptools
学习光荣之路python课程时,使用python setup.py install安装其他模块时,第一次安装某模块成功了.安装另一模块却报错ImportError: No module named s ...
- 【Python之路】第五篇--Python基础之杂货铺
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 ...
- 关于scanf的返回值
今天写一个小程序时误用while(scanf("%d",&b)!=a),以为scanf的返回值就是输入的值. 其实真相是: scanf返回接收到的变量值的个数. int a ...