|
C#开源TCP-Socket可用服务端和客户端代码
废话不多说,直接上代码,有缘人复制即可~
服务端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace socket_test2
{
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和端口
//string IPaddr = "192.168.0.106";
//long IPaddrL = long.Parse(IPaddr);
IPEndPoint IPBInd = new IPEndPoint(IPAddress.Parse("192.168.0.106"), 1234);
//EndPoint iped = IPEndPoint.Parse("192.168.0.106:1234");
serverSocket.Bind(IPBInd);
//监听有没有电话连接,顺便规划客服人数,如果是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));
}
}
}
}
}
客户端
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
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.0.106", 1234);
//连接上服务器,就能发消息
string sendMessage;
//计数器
int num = 0;
while (true)
{
if (num >= 0)
{
Thread.Sleep(1);
sendMessage = "你好,我是"+num+"用户";
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));
}
}
}
}
|