C#实现Socket连接
服务端
建立Socket
AddressFamily.InterNetwork内网,SocketType.Stream以流来通信,Tcp为协议
电脑主机和端口和ip地址进行绑定
监听客户端连接
阻塞方法 生成Socket 接受客户端连接
声明数组,存放聊天的缓冲区。
使用while方法 , 接收数据并存放在数组中 实现多次接消息
还原接收信息为明文
实现客服给客户发消息
代码如下
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SocketDemo
{
class Program
{
static void Main(string[] args)
{
//创建Socket 相当于是通信的主机
//监听打进来的电话,并转接给客服
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定ip和端口
EndPoint iped = IPEndPoint.Parse("192.168.43.227:1234");
serverSocket.Bind(iped);
//监听有没有电话连接,顺便规划客服人数,如果是0就是无限个客服
serverSocket.Listen(100);
//接电话
//分配客服和客户进行一对一通信
//阻塞方法 没有电话打进来,那么代码就执行到这里 Accept
Socket kefuScoket = serverSocket.Accept();
System.Console.WriteLine("客户的本地端口是:" + kefuScoket.LocalEndPoint.ToString());
System.Console.WriteLine("打电话进来的客户端是:" + kefuScoket.RemoteEndPoint.ToString());
//接消息,需要一个消息的缓冲区
byte[] readBuff = new byte[1024];
while (true)
{
//消息拿到,并存放在缓冲区,并记住消息的长度
int receiveCount = kefuScoket.Receive(readBuff);
string receiveMessage = Encoding.UTF8.GetString(readBuff, 0, receiveCount);
System.Console.WriteLine("客户端发过来的消息:" + receiveMessage);
//string backMessage = "我是你的专属客服,有什么可以帮助你的";
kefuScoket.Send(Encoding.UTF8.GetBytes("服务器已经接到你发来的消息:" + receiveMessage));
}
}
}
}
客户端
- 建立Socket
- Connect连接服务端
- try catch语句 捕捉异常
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace clientSocket
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//接收服务器的回馈
byte[] readBuff = new byte[1024];
//连接服务器
clientSocket.Connect("192.168.43.227", 1234);
//连接上服务器,就能发消息
string sendMessage;
//计数器
int num = 0;
while (true)
{
if (num == 0)
{
sendMessage = "你好,我是192用户";
num++;
}
else
{
sendMessage = Console.ReadLine();
}
//转码,转成0101010的格式
byte[] sendBytes = Encoding.UTF8.GetBytes(sendMessage);
//把二进制的消息发出去
clientSocket.Send(sendBytes);
int count = clientSocket.Receive(readBuff);
System.Console.WriteLine("服务器发送的消息是:" + Encoding.UTF8.GetString(readBuff, 0, count));
}
}
}
}