🍅 基础推荐:
Java基础教程系列
🍅 实战推荐:
Spring Boot基础教程
🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪
🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
一、socket通信
二、socket典型应用
三、基于TCP协议的面向连接的套接字(Internet Socket)
四、基于UDP协议的无连接的套接字(Datagram Sockets)
五、C# 实现socket服务端与客户端通信
六、效果展示
一、socket通信
socket翻译成中文就是“套接字”的意思,所谓的socket编程就是指用计算机语言通过编程来实现计算机之间的通信问题。socket通信技术就是两台联网或者多态联网的计算机之间的数据交互技术。
二、socket典型应用
socket最典型的应用就是web服务器和浏览器。
1、浏览器获取用户输入的URL(全球资源定位符),向web服务器发送请求;
2、web服务器接收到URL并进行分析,将对应的网络内容以及资源返回给浏览器;
3、浏览器接收到web服务器返回的网页内容以及资源,将其进行解析和渲染,将最终的效果展示给用户。
三、基于TCP协议的面向连接的套接字(Internet Socket)
1、TCP:The Transmission Control Protocol 传输控制协议。
2、我们经常讲的套接字也就是Internet Scoket,根据数据传输方式,可以将Internet Scoket分为几种,在使用socket()创建网络连接时,必须告诉它是哪一种数据传输方式,简单来说就是数据传输的控制协议。
计算机领域称之为:流格式套接字(Stream Sockets),在计算机代码中使用SOCK_STREAM表示。
3、SOCK_STREAM有以下特点:
-
可靠的、双向的通信数据流;
-
数据传输是按照顺序进行的;
-
数据在传输中是准确无误的,是自带重发机制的;
-
数据的发送和接收是不同步的,存在缓冲区;
-
流格式套接字的典型应用就是HTTP协议,因为浏览器在加载进行解析时必须要数据完整正确。
四、基于UDP协议的无连接的套接字(Datagram Sockets)
1、UDP:User Datagram Protocol 用户数据报协议。
2、基于UDP协议的无连接的套接字,计算机领域称之为:数据报格式套接字(Datagram Sockets),计算机代码中使用SOCK_DGRAM表示。
SOCK_DGRAM是一种高效率、高速度、不可靠的通信数据流。其是基于UDP协议的,不用进行数据校验,只进行数据传输。
3、SOCK_DGRAM有以下特点:
-
每次传输数据大小有限制;
-
追求高效率、高速度;
-
传输的数据可能丢失或者损坏(小概率事件);
-
数据的发送和接收是同步的,也就是存在数据边界;
数据报格式的典型应用就是QQ视频和语音,因为这两者的需求是高效率和低延时,同时小概率的丢失数据不会影响整个数据的传输质量。
五、C# 实现socket服务端与客户端通信
private void socketServer()
Log("大家好,我是socket服务端!");
//1,创建socket using System.Net.Sockets;
//AddressFamily.InterNetwork内网,SocketType.Stream以流来通信,第三个为协议
Socket tcpSever = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//2,绑定服务器IP(计算机唯一标识)和端口号。端口号将通信数据给指定的软件。一个软件占用一个特定端口号(0-60000)
//查看本机IP:cmd-》ipconfig 本机局域网IP:198.168.1.2
//IPAddress ipAddress = new IPAddress(new byte[] { 192,168,1,2});
EndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);//IPEndPoint是对IP+端口号的一层封装
tcpSever.Bind(point);//向操作系统申请一个可用的IP和端口号做通信。绑定当前IP和端口号
//3.监听。等待客户端连接
tcpSever.Listen(100);//参数是最大连接数
Socket clientSocket = tcpSever.Accept();//暂停当前线程,直到一个客户端连接过来,之后进行下面的代码。返回的socket为客户端socket
//使用返回的socket跟客户端做通信
string message = "welcome!";
Log(message);
byte[] meg = Encoding.UTF8.GetBytes(message);//对字符串编码,得带一个字节数组
clientSocket.Send(meg);
//接受客户端数据
byte[] buffer = new byte[1024];
int length = clientSocket.Receive(buffer);//接受客户端数据
string mes = Encoding.UTF8.GetString(buffer, 0, length);
Log(mes);
tcpSever.Close();
private void socketClient(string msg)
Log("大家伙,我是CSDN素小暖,创建socket客户端");
//创建socket
Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//发起连接请求
EndPoint remoteIp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
tcpClient.Connect(remoteIp);//连接远程已经绑定IP和端口号的服务器端。已连接远程主机。
//从远程主机接受数据并显示在客户端
byte[] buffer = new byte[1024];
int byteNum = tcpClient.Receive(buffer);//将接受到的数据,存入buffer。返回值为接受到的字节数
string message = Encoding.UTF8.GetString(buffer, 0, byteNum);//将接受到的数据,转化为字符串
Console.WriteLine(message);
//发送给服务器
string clientToSeverMes = msg;
byte[] cts = Encoding.UTF8.GetBytes(clientToSeverMes);
tcpClient.SendTo(cts, remoteIp);
六、效果展示
🍅 基础推荐:Java基础教程系列
🍅 实战推荐:Spring Boot基础教程
🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪
🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
添加微信,备注1024,赠送Java学习路线思维导图
知识基础:
1.按网络覆盖范围,计算机网络可分类为广域网、城域网、局域网和Internet。
2.在TCP/IP网络中测试连通性的常用命令是Ping 命令,ipconfig。
3.Internet的核心协议是TCP/IP 。
4.IP地址127.0.0.1是一个测试地址。
5.Internet的前身是Arpanet 。
6.在企业内部网与外部网之间,用来检查网络请求分组是否合法,保护网络资源不被非...
除了基本的通信功能外,C#Socket还提供了很多有用的功能,如断线重连和支持多个客户端同时连接。在这篇文章中,我们将重点介绍C#Socket异步、同步通信服务端、客户端源码,以及如何实现断线重连、支持同时连接多个客户端等实用功能。因此,在编写代码时,我们应尽可能详细地进行注释,并为每个方法、变量和类提供清晰的说明,以方便其他开发人员的阅读和理解。总之,本文重点介绍了C#Socket异步、同步通信服务端、客户端源码的实现方法,并介绍了如何实现断线重连、支持多个客户端同时连接等实用功能。
设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。
服务端程序能响应单个或任意多个客户端连接请求;服务端能向单个客户发送消息,支持群发消息给所有客户端;
通信的双方具备异常响应功能,包括对方异常退出的处理。如果客户端退出,服务器有响应;反之亦然。
客户端之间直接通信,C与C之间直接通信(不是通过S传递)。
设计思路:
2、我们经常讲的套接字也就是Internet Scoket,根据数据传输方式,可以将Internet Scoket分为几种,在使用socket()创建网络连接时,必须告诉它是哪一种数据传输方式,简单来说就是数据传输的控制协议。端口号将通信数据给指定的软件。原文链接:https://blog.csdn.net/guorui_java/article/details/106142762。数据报格式的典型应用就是QQ视频和语音,因为这两者的需求是高效率和低延时,同时小概率的丢失数据不会影响整个数据的传输质量。
C#创建websocket服务,实现实时通讯。WebSocket是一种在单个TCP连接上进行全双工通信的通信协议。与HTTP协议不同,它允许服务器主动向客户端发送数据,而不需要客户端明确地请求。这使得WebSocket非常适合需要实时或持续通信的应用程序,例如在线聊天、实时游戏、股票市场更新等。
本示例提供了使用C#编程语言实现Socket通信的完整示例代码。包括服务端和客户端的实现,服务端支持多个连接,并在客户端与服务端之间实现了心跳机制。心跳机制用于维持连接的活跃性和检测连接是否断开。服务端和客户端的代码都做了详细注释,方便阅读和理解。通过该示例,你将学习如何创建基本的服务端和客户端,并了解如何添加心跳功能以确保连接的稳定性。无论是初学者还是有经验的开发者,这个示例都将为你提供一个完整的Socket编程实现的参考。
这个问题第一次是我在实现一个导师的方案的时候所发现的,一开始我需要实现服务器与客户端的密钥协商和数据传递,服务器需要主动分发(推送)密钥给客户端,因为以前没有做过相关编码,后来只能想到用反向连接,也就是交换C/S的身份。
再后来是在做一个机器学习的问题时候,因为机器学习模型的运行需要综合多个客户端(边缘节点)的数据,然后得到结果,而且各个客户端的数据传输是不一致的,时间和数据量不定。...
Stream.Read 方法当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。语法:public abstract intRead(byte[] buffer,intoffset,intcount)参数:buffer: 字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的offset和 (offset+count-1)...