C#中的Socket
Posted Hello Bug.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的Socket相关的知识,希望对你有一定的参考价值。
一:什么是Socket?
Socket是做网络通信用的,网络通信就需要协议
一个Socket包含协议(TCP或UDP)、本地ip、远程ip、本地端口、远程端口
一个ip地址对应一台计算机,一个端口号(0-65535)对应一台计算机中的某个软件,每个Socket连接都是从一台计算机的一个端口连接到另外一台计算机的某个端口
二:使用TCP协议(模拟服务器向客户端发消息)
通信流程:
1.创建Socket——服务器和客户端
2.绑定ip和端口号——服务器
3.开始监听(等待客户端连接)——服务器
4.发起连接的请求——客户端
4.接收客户端连接(只有当有一个客户端连接进来,才会执行下面的操作)——服务器
5.与客户端通信,发消息——服务器
服务器代码:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace socket_server
{
class MainClass
{
static string ip = "192.168.31.23";
static int port = 1111;
public static void Main(string[] args)
{
Console.WriteLine("服务器启动.....");
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
EndPoint point = new IPEndPoint(IPAddress.Parse(ip), port);
server.Bind(point);
server.Listen(100);
Socket socket = server.Accept();
Console.WriteLine("a client connect.....");
while (true)
{
string str = Console.ReadLine();
socket.Send(Encoding.UTF8.GetBytes(str));
}
}
}
}
客户端代码:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace socket_client
{
class MainClass
{
static string ip = "192.168.31.23";
static int port = 1111;
public static void Main(string[] args)
{
Console.WriteLine("客户端启动.....");
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
EndPoint point = new IPEndPoint(IPAddress.Parse(ip), port);
client.Connect(point);
while (true)
{
byte[] bytes = new byte[1024];
int len = client.Receive(bytes);
string msg = Encoding.UTF8.GetString(bytes, 0, len);
Console.WriteLine(msg);
}
}
}
}
三:使用UDP协议(模拟服务器向客户端发消息)
通信流程:
1.创建Socket——服务器和客户端
2.绑定ip和端口号——服务器和客户端(因为不需要建立连接,所以不分客户端和服务器)
3.与客户端通信,收发消息
服务器代码:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace socket_server
{
class MainClass
{
static string ip = "192.168.31.23";
static int port = 1111;
public static void Main(string[] args)
{
Console.WriteLine("服务器启动.....");
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
EndPoint point = new IPEndPoint(IPAddress.Parse(ip), port);
while (true)
{
string str = Console.ReadLine();
server.SendTo(Encoding.UTF8.GetBytes(str), point);
}
}
}
}
客户端代码:
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
namespace socket_client
{
class MainClass
{
static string ip = "192.168.31.23";
static int port = 1111;
public static void Main(string[] args)
{
Console.WriteLine("客户端启动.....");
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
EndPoint point = new IPEndPoint(IPAddress.Parse(ip), port);
client.Bind(point);
while (true)
{
byte[] bytes = new byte[1024];
EndPoint ep = new IPEndPoint(IPAddress.Any, 0);
int len = client.ReceiveFrom(bytes, ref ep);
string msg = Encoding.UTF8.GetString(bytes, 0, len);
Console.WriteLine(msg);
}
}
}
}
四:TCP和UDP的区别
——TCP必须建立连接才可以通信,UDP不建立连接也能够通信,所以TCP可以保证数据的正确性,UDP可能会丢包
——因为UDP不需要建立连接,所以占用系统内存资源少
——TCP是流模式,UDP是数据报模式
以上是关于C#中的Socket的主要内容,如果未能解决你的问题,请参考以下文章
unity5 中的 Socket.IO,C# - 如何发出字符串或对象?