---部分截图来自 siki学院Unity网络通讯课程
Socket
网络上的两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为一个 Socket ,Socket 包含了网络通信必须的五种信息
Socket 例子{
协议: TCP
本地: IP ,端口
远程: IP ,端口
}
可以通过ipconfig,netstat -ano 查看 Ip 和端口
创建客户端连接服务端
客户端代码:
using System;
using System.Net.Sockets;
namespace wangluo
{
class Program
{
static void Main(string[] args)
{
//创建一个Socket 需要using System.Net.Sockets;
Socket tempClient = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
tempClient.Connect("127.0.0.1", 8888);
}
}
}
服务端代码:
using System;
using System.Net.Sockets;
using System.Net;
namespace Server
{
class Program
{
static void Main(string[] args)
{
Socket tempServer = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint tempEndPoint =
new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);
//using System.Net;
tempServer.Bind(tempEndPoint); //绑定端口
tempServer.Listen(0); //监听,0表示挂起的队列无限长
Console.WriteLine("服务端启动成功");
Socket tempConnectClient = tempServer.Accept();
Console.WriteLine("客户端连接成功:" + tempConnectClient);
}
}
}
先开启服务端再开启客户端
客户端服务端互发信息
客户端代码:
using System;
using System.Net.Sockets;
using System.Text;
namespace wangluo
{
class Program
{
static void Main(string[] args)
{
//创建一个Socket 需要using System.Net.Sockets;
Socket tempClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
tempClient.Connect("127.0.0.1", 8888);
//客户端向服务端发信息
string tempSendInfo = Console.ReadLine();
//将字符串转换成 buffer
byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
//发送信息
tempClient.Send(tempSendData);
//接收来自服务端的信息
byte[] tempReadBuffer = new byte[1024];
tempClient.Receive(tempReadBuffer);
string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
Console.WriteLine("接收到服务端信息:" + tempReadString);
}
}
}
服务端代码:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace Server
{
class Program
{
static void Main(string[] args)
{
Socket tempServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint tempEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888); //using System.Net;
tempServer.Bind(tempEndPoint); //绑定端口
tempServer.Listen(0); //监听,0表示挂起的队列无限长
Console.WriteLine("服务端启动成功");
Socket tempConnectClient = tempServer.Accept();
Console.WriteLine("客户端连接成功:" + tempConnectClient);
byte[] tempReadBuffer = new byte[1024];
tempConnectClient.Receive(tempReadBuffer);
//将 byte 转换成字符串
string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
Console.WriteLine("接收到客户端信息:" + tempReadString);
//服务端向客户端发信息
string tempSendInfo = Console.ReadLine();
byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
tempConnectClient.Send(tempSendData);
}
}
}
封装一下代码:
客户端:
using System;
using System.Net.Sockets;
using System.Text;
namespace wangluo
{
class Program
{
static void Main(string[] args)
{
//创建一个Socket 需要using System.Net.Sockets;
Socket tempClient = CreateSocket();
tempClient.Connect("127.0.0.1", 8888);
Send(tempClient);
Receive(tempClient);
}
static Socket CreateSocket()
{
return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
static void Send(Socket tempClient)
{
//客户端向服务端发信息
string tempSendInfo = Console.ReadLine();
//将字符串转换成 buffer
byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
//发送信息
tempClient.Send(tempSendData);
}
static void Receive(Socket tempClient)
{
//接收来自服务端的信息
byte[] tempReadBuffer = new byte[1024];
tempClient.Receive(tempReadBuffer);
string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
Console.WriteLine("接收到服务端信息:" + tempReadString);
}
}
}
服务端:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace Server
{
class Program
{
static void Main(string[] args)
{
Socket tempServer = CreateSocket();
BindAndListen(tempServer);
Socket tempConnectClient = Accept(tempServer);
Receive(tempConnectClient);
Send(tempConnectClient);
}
static Socket CreateSocket()
{
return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
static void BindAndListen(Socket pSocket)
{
IPEndPoint tempEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888); //using System.Net;
pSocket.Bind(tempEndPoint); //绑定端口
pSocket.Listen(0); //监听,0表示挂起的队列无限长
Console.WriteLine("服务端启动成功");
}
static Socket Accept(Socket pSocket)
{
Socket tempConnectClient = pSocket.Accept();
Console.WriteLine("客户端连接成功:" + tempConnectClient);
return tempConnectClient;
}
static void Receive(Socket pSocket)
{
byte[] tempReadBuffer = new byte[1024];
pSocket.Receive(tempReadBuffer);
//将 byte 转换成字符串
string tempReadString = Encoding.UTF8.GetString(tempReadBuffer);
Console.WriteLine("接收到客户端信息:" + tempReadString);
}
static void Send(Socket pSocket)
{
//服务端向客户端发信息
string tempSendInfo = Console.ReadLine();
byte[] tempSendData = Encoding.UTF8.GetBytes(tempSendInfo);
pSocket.Send(tempSendData);
}
}
}
Socket 代码解析:
AddressFamily: InterNetwork 使用IPv4 InterNetworkV6 使用IPv6
SocketType: