socket通信(C#)
通信两端分别为客户端(Client)和服务器(Server):
统一编码格式:【Encoding.UTF8】
测试环境:
需要启动谁就将谁设为启动项:
(先启动Server,后启动Client)
服务器(Server):
1:建立一个Socket对像;
2:用socket对像的Bind()方法绑定EndPoint;
3:用socket对像的Listen()方法开始监听;
4:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;
5:用新的socket对象接收(Receive)和发送(Send)消息。
服务器编码:
-
using System;
-
using System.Collections.Generic;
-
using System.Linq;
-
using System.Net;
-
using System.Net.Sockets;
-
using System.Text;
-
using System.Threading.Tasks;
-
-
namespace Socket_Server
-
{
-
class Program
-
{
-
static Socket ReceiveSocket;
-
static void Main(string[] args)
-
{
-
int port = 8885;
-
//侦听所有网络客户接口的客活动
-
IPAddress ip = IPAddress.Any;
-
//使用指定的地址簇协议、套接字类型和通信协议 <br> ReceiveSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
-
//有关套接字设置
-
ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
-
IPEndPoint endPoint = new IPEndPoint(ip, port);
-
ReceiveSocket.Bind(new IPEndPoint(ip, port)); //绑定IP地址和端口号
-
ReceiveSocket.Listen(10); //设定最多有10个排队连接请求
-
Console.WriteLine("建立连接");
-
Socket socket = ReceiveSocket.Accept();
-
-
byte[] receive = new byte[1024];
-
socket.Receive(receive);
-
Console.WriteLine("接收到消息:" + Encoding.UTF8.GetString(receive));
-
byte[] send = Encoding.UTF8.GetBytes("成功接收消息,并回发消息。");
-
socket.Send(send);
-
Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(send));
-
}
-
}
-
}
启动Server等待客户端访问:需要安全权限,点击【允许访问即可】
客户端(Client):
1:建立一个Socket对像;
2:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;
3:如果连接成功,就用socket对像的Send()方法向服务器发送信息;
4:用socket对像的Receive()方法接受服务器发来的信息 ;
5:通信结束后一定记得关闭socket;
客户端编码:
-
using System;
-
using System.Collections.Generic;
-
using System.Linq;
-
using System.Net;
-
using System.Net.Sockets;
-
using System.Text;
-
using System.Threading.Tasks;
-
-
namespace Socket_demo
-
{
-
class Program
-
{
-
static Socket ClientSocket;
-
static void Main(string[] args)
-
{
-
string IP = "127.0.0.1";
-
int port = 8885;
-
//将IP地址字符串转换成IPAddress实例
-
IPAddress ip = IPAddress.Parse(IP);
-
//使用指定的地址簇协议、套接字类型和通信协议
-
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
-
// 用指定的ip和端口号初始化IPEndPoint实例
-
IPEndPoint endPoint = new IPEndPoint(ip, port);
-
ClientSocket.Connect(endPoint); //与远程主机建立连接
-
-
Console.WriteLine("开始发送消息");
-
//通信时实际发送的是字节数组,所以要将发送消息转换字节
-
byte[] message = Encoding.UTF8.GetBytes("客户端链接127.0.0.1:8885服务器");
-
ClientSocket.Send(message);
-
Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(message));
-
byte[] receive = new byte[1024];
-
int length = ClientSocket.Receive(receive);//length 接收字节数组长度
-
Console.WriteLine("接收消息为:" + Encoding.UTF8.GetString(receive));
-
ClientSocket.Close();//关闭连接
-
}
-
}
-
}
启动Client客户端,访问服务器:
访问成功:
如果Server服务端未启动则为:
服务端Server接收到的消息:
创建socket线程
Thread t = new Thread(()=>{});
//将监听放在死循环内
while(true){undefined
socket监听
}
//启动线程
t.Start();
-
using System;
-
using System.Collections.Generic;
-
using System.Linq;
-
using System.Net;
-
using System.Net.Sockets;
-
using System.Text;
-
using System.Threading;
-
using System.Threading.Tasks;
-
-
namespace Socket_Server
-
{
-
class Program
-
{
-
static Socket ReceiveSocket;
-
static void Main(string[] args)
-
{
-
//创建socket线程
-
Thread t = new Thread(()=> {
-
int port = 8885;
-
//侦听所有网络客户接口的客活动
-
IPAddress ip = IPAddress.Any;
-
//使用指定的地址簇协议、套接字类型和通信协议 <br> ReceiveSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);
-
//有关套接字设置
-
ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
-
IPEndPoint endPoint = new IPEndPoint(ip, port);
-
ReceiveSocket.Bind(new IPEndPoint(ip, port)); //绑定IP地址和端口号
-
ReceiveSocket.Listen(10); //设定最多有10个排队连接请求
-
Console.WriteLine("建立连接");
-
while (true)
-
{
-
Socket socket = ReceiveSocket.Accept();
-
-
byte[] receive = new byte[1024];
-
socket.Receive(receive);
-
Console.WriteLine("接收到消息:" + Encoding.UTF8.GetString(receive));
-
byte[] send = Encoding.UTF8.GetBytes("成功接收消息,并回发消息。");
-
socket.Send(send);
-
Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(send));
-
}
-
});
-
//启动线程
-
t.Start();
-
}
-
}
-
}
启动服务器,服务器端可以无限次数的接收客户端信息了。
到这里,Socket的基础技能讲解就完毕了,可以通过这个技能在工作中主要会进行推送功能编码,【推送】是一个非常重要的功能,你手机里的各种推送广告、APP的各种消息推送、最最基础的QQ、微信的聊天功能都依赖于此项技术。后面会对【Web Socket】进行讲解,关注好,后面直接查看此【分类专栏】即可。
作业项目,通过此demo,自行搭建Winform项目,进行Socket服务器端,与Client客户端,进行信息交互。
可以分开两个机器,使用【ipconfig】查看各自的IP,使用【ping】命令测试网络是否通畅,设置好对应的端口号进行相互访问即可完成通信功能。
文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。
原文链接:laoshifu.blog.csdn.net/article/details/120498014
- 点赞
- 收藏
- 关注作者
评论(0)