Socket通信的个人理解

因为最近做了一个双人网络对战的五子棋项目,因此对在C#中实现Socket通信做了一个简单的研究,以此记录一下个人理解,便于日后继续学习。

什么是Socket

应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。
多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。
为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。

区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址使用的传输层协议(TCP或UDP)使用的端口号
Socket原意是 “插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

Socket的TCP通信

  • 服务器端
    (1)建立服务器端的Socket,开始监听整个网络中的连接请求。
    (2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。
    (3)当完成通信后,服务器端关闭与客户端的Socket连接。
  • 服务器端
    (1)建立客户端的Socket,确定要连接的服务器的主机名和端口。
    (2)发送连接请求到服务器,并等待服务器的反馈信息。
    (3)连接成功后,与服务器进行数据的交互。
    (4)数据处理完毕后,关闭自身的Socket连接。

五子棋的通信

服务器端发送的响应

1,连接请求的响应
如果客户端连接服务器成功了,服务器就对客户端发送包含连接成功信息的响应。
2,发送创建房间的响应
参数是client的Socket,即客户端向服务器端发送创建房间的信息,则服务器向客户端发送创建房间的响应,当客户收到之后,就进行房间的创建。
3,发送进入房间的响应
如果服务器收到了来自客户端的message表示要进入房间,则分别向房间的创建者和加入者发送进入房间的响应。
4,发送退出房间的响应
客户端点击退出或者关闭窗口时,会向服务器发送退出房间的message,如果发送者是房间的创建者,则向房间的加入者发送退出房间的响应;否则,就向房间的创建者发送退出房间的响应。
5,发送服务器关闭消息
当服务器关闭时,想客户端发送服务器关闭的消息
6,发送落子消息的响应
参数是房间和string形式的落子信息。当服务器收到这一信息时,将落子等信息打包成messageBox,然后将其分别发送到对应的两个客户端。
7,发送重新游戏的请求
参数是房间和发送的客户端身份。如果发送重新开始游戏请求的是房间创建者,那么就给房间的另一个用户发送重新开始游戏的请求;否则,就给另外一个发送重新开始游戏的请求。
8,发送重新游戏的判定结果
参数包括一个bool值来表示判定结果。

对于服务器端的定义:

首先,定义了两个列表,用来存储当前连接服务器的玩家(包括玩家颜色,ip,昵称,连接的端口),以及当前的房间的列表。
服务端给各个客户端分配一个独立不重复的ID,在客户端登陆时根据认证参数来查找ID。客户端发送消息时要指定客户端的一个独立身份信息,可以是ID,也可以是其他,服务端可通过查询来获取ID以及客户端当前是否连接上等来对客户端发送的消息进行响应或者存储等客户端上线后再转发。
两个client分别都和server创建了一个Scoket,然后二者分别于server进行通信,server相当于是一个中介机构,通过Room的ID和player的标识来进行独立的识别。server中会对client发来的信息进行缓存,并根据该client的messageBox中的目标(即master/member),利用server目标client建立的socket,将信息(响应)发送给对应的client。

如何实现交替的下棋而没有冲突呢?

每个client端,在点击棋盘并成功生成棋子后,将信息打包成messageBox通过Socket发送到另一个client端中。在发送后,会对鼠标点击的响应进行disable,然后启动clientListener对响应请求进行监听,直到再次接收到了对方传来的message,才能重新能对棋盘进行操作。

当一方关闭时,如何实现连接的中断?

当一方关闭时,会对另外一方发送信息“关闭”信息并关闭自身的Socket连接。而当对方收到MessageBox并发现其中的command(命令)是退出,则会弹出“连接断开”的窗口并返回游戏大厅中(其本身的Socket连接并没有中断)。
而当Client与Server断开连接后,服务器关闭与客户端的Socket连接。

参考:
C#中Socket的TCP通信原理

猜你喜欢

转载自blog.csdn.net/lym940928/article/details/80040135
今日推荐