基本介绍
名词解释
Socket:网络连接的一端被称为socket。一个socket包含以下五个元素:使用的协议、本机IP、本地端口、远程IP、远程端口。
IP地址:每台电脑都有一个自己的IP地址。
端口(port):是设备与外界通信交流的出口
每一个进程(客户端1、客户端2、服务端)可以拥有多个Socket,每个Socket通过不同端口与其他计算机连接。
每一条Socket连接代表着本地Socket→本地端口→网络介质→远程端口→远程Socket的链路。
网络通信的步骤示意图:
利用socket通信的步骤
服务端:
- 创建socket对象
- Scock socket = new Socket()
- 绑定监听消息IP和端口号
- IPAddress ip = IPAddress.Parse()
- EndPoint endPoint = new IPEndPoint(ip, 6000)
- 开始监听客户端的连接请求
- socket.Listen(100)
- 接收消息
- byte[] bt = new byte[1024];//这里是消息的缓冲区
- int messageclient = socket.Receive(bt);
客户端:
- 创建socket实例对象
- 连接服务器
- tcpSocket.Connect(IPAddress.Parse("127.0.0.1"), 6000);
- 接收消息
- byte[] bt = new byte[1024] ;
- int messgeLength = tcpSocket.Receive(bt);
- 发送消息
- tcpSocket.Send(ASCIIEncoding.UTF8.GetBytes("我有个问题"));
Socket编程的一个栗子
以下代码参考了这篇博文:https://blog.csdn.net/m0_67391401/article/details/124093758
服务端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace SocketGameServer
{
class Program
{
static void Main(string[] args)
{
//创建一个socket对象
Socket tcpsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定监听消息IP和端口号
IPAddress ip = IPAddress.Parse("199.199.1.230");
EndPoint endPoint = new IPEndPoint(ip, 6000);
tcpsocket.Bind(endPoint);
Console.WriteLine("服务器启动完成");
//开始监听客户端的连接请求
tcpsocket.Listen(100);
Socket socket = tcpsocket.Accept();
Console.WriteLine("有个客户端连接进来");
//向客户端发送消息
string message;
message = "你好,这里是服务端";
var date = ASCIIEncoding.UTF8.GetBytes(message);
socket.Send(date);
//接收服务端的消息
byte[] bt = new byte[1024];
int messageclient = socket.Receive(bt);
Console.WriteLine("接收从客户端发来的消息:" + ASCIIEncoding.UTF8.GetString(bt));
Console.ReadLine();
}
}
}
客户端代码:
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using UnityEngine;
public class ClientSocket : MonoBehaviour
{
private Socket tcpSocket;
public void OnBtnConnect()
{
tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tcpSocket.Connect(IPAddress.Parse("199.199.1.230"), 6000);
Debug.Log("连接服务器");
byte[] bt = new byte[1024];
int messageLength = tcpSocket.Receive(bt);
Debug.Log(ASCIIEncoding.UTF8.GetString(bt));
tcpSocket.Send(ASCIIEncoding.UTF8.GetBytes("我有个问题"));
}
}
运行效果::服务器
客户端: