代码是抄来了,找不到出处了,经测试代码简洁可用
服务端代码:
using System;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace SocketServer
{
internal class Program
{
private static readonly byte[] Result = new byte[1024];
private const int MyProt = 8885; //端口
private static Socket _serverSocket;
private static void Main()
{
//服务器IP地址
var ip = IPAddress.Parse("127.0.0.1");
_serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_serverSocket.Bind(new IPEndPoint(ip, MyProt)); //绑定IP地址:端口
_serverSocket.Listen(10); //设定最多10个排队连接请求
Console.WriteLine("启动监听{0}成功", _serverSocket.LocalEndPoint);
//通过Clientsoket发送数据
var myThread = new Thread(ListenClientConnect);
myThread.Start();
Console.ReadLine();
}
/// <summary>
/// 监听客户端连接
/// </summary>
private static void ListenClientConnect()
{
while (true)
{
var clientSocket = _serverSocket.Accept();
clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
var receiveThread = new Thread(ReceiveMessage);
receiveThread.Start(clientSocket);
}
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="clientSocket"></param>
private static void ReceiveMessage(object clientSocket)
{
var myClientSocket = (Socket)clientSocket;
while (true)
{
try
{
//通过clientSocket接收数据
var receiveNumber = myClientSocket.Receive(Result);
Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint, Encoding.ASCII.GetString(Result, 0, receiveNumber));
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
myClientSocket.Shutdown(SocketShutdown.Both);
myClientSocket.Close();
break;
}
}
}
}
}
客户端代码:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace SocketClient
{
class Program
{
private static readonly byte[] Result = new byte[1024];
private static void Main()
{
//设定服务器IP地址
var ip = IPAddress.Parse("127.0.0.1");
var clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口
Console.WriteLine("连接服务器成功");
}
catch
{
Console.WriteLine("连接服务器失败,请按回车键退出!");
return;
}
//通过clientSocket接收数据
var receiveLength = clientSocket.Receive(Result);
Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(Result,0,receiveLength));
//通过 clientSocket 发送数据
for (int i = 0; i < 10; i++)
{
try
{
Thread.Sleep(1000); //等待1秒钟
var sendMessage = "client send Message Help " + DateTime.Now;
clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
Console.WriteLine("向服务器发送消息:{0}" + sendMessage);
}
catch
{
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
break;
}
}
Console.WriteLine("发送完毕,按回车键退出");
Console.ReadLine();
}
}
}