相关概念
- socket:是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
- 网口:用于连接设备和网络的端口。
- Nuget包:System.Net.Sockets
- 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
- 客户端请求:由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。客户端指出服务器端套接字的地址和端口号,向服务器端接字提出连接请求。
- 连接确认:当服务器端套接字监听到或者接收到客户端套接字的连接请求,响应客户端套接字的请求,建立一个新的线程,并把服务器端套接字的描述发送给客户端。而服务器端套接字继续监听,接收其他客户请求。
- 常见的网口类型包括RJ-45接口、RJ-11接口、BNC接口、Console接口、SC光纤接口、FDDI接口、AUI接口等。
- RJ-45接口是最常见的以太网接口类型,广泛应用于计算机、交换机、路由器等网络设备之间。RJ-45接口具有8根引脚,每根引脚都有明确的定义和用途,支持高速数据传输,传输速率通常为10Mbps、100Mbps、1000Mbps。
Demo
主动接收并回传Demo
//声明socket对象
Socket socket = null;
public Window1()
{
InitializeComponent();
//实例化对象,地址族,套接字类型,协议
socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
}
//连接客户端按钮事件
private void Button_Click(object sender, RoutedEventArgs e)
{
//测试连接是否有异常
try {
//连接服务器,服务器加端口号
socket.Connect("192.168.73.8", 6666);
MessageBox.Show("服务器连接成功");
}
catch (Exception ex){
//异常错误消息提示
MessageBox.Show(ex.Message,"错误提示");
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//定义发送数据的数组
string txt = "发送测试?";
//发送数据
byte[]data=Encoding.UTF8.GetBytes(txt);
//发送数据
socket.Send(data);
MessageBox.Show("数据发送成功");
//初始化接收数组
byte[] respBytes = new byte[500];
//接收发送的数组(此处默认客户端会自动回传)
socket.Receive(respBytes);
//将接收到的数组解码
string msg=Encoding.UTF8.GetString(respBytes);
this.messageTXT.Text = msg;
}
}
}
被动接收Demo
//连接客户端按钮事件
private void Button_Click(object sender, RoutedEventArgs e)
{
//测试连接是否有异常
try {
//连接服务器,服务器加端口号
socket.Connect("192.168.57.8", 6666);
//在异步线程中处理接收事件
Task.Run(() =>
{
while (true)
{ //创建接收回传的数组
byte[] respBytes = new byte[1024];
//将接收到的内容放入数组中
socket.Receive(respBytes);
//解码
string msg = Encoding.ASCII.GetString(respBytes);
//文本框显示
//包裹于UI主线程
this.Dispatcher.Invoke(() =>
{
this.messageTXT.Text = msg;
});
}
});
MessageBox.Show("服务器连接成功");
}
catch (Exception ex){
MessageBox.Show(ex.Message,"错误提示");
}
}