求!!!用C#中的Socket套接字实现一个服务器与多个客户端的通信代码

2025-03-01 11:09:12
推荐回答(1个)
回答1:

//一个最简单的Socket服务端程序,不知道是否对你有用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace SocketServer1
{
class Program
{
static bool ServiceStartFlag = false;
static Socket socket;
static Thread thread;

static void Main(string[] args)
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry ieh = Dns.GetHostEntry("localhost");
IPAddress localServerIP = ieh.AddressList[1];
IPEndPoint localIPEndPoint = new IPEndPoint(localServerIP, 8080);

socket.Bind(localIPEndPoint);
socket.Listen(600);

thread = new Thread(new ThreadStart(AcceptClient));
thread.IsBackground = true;
thread.Start();

Console.ReadLine();
}

static void AcceptClient()
{
ServiceStartFlag = true;

while (ServiceStartFlag)
{
try
{
Socket newSocket = socket.Accept();
string onemessge = "\0";

byte[] tmpBytes = Encoding.UTF8.GetBytes(onemessge);
newSocket.Send(tmpBytes);

Thread newThread = new Thread(new ParameterizedThreadStart(ReadMsg));
newThread.IsBackground = true;
object obj = newSocket;
newThread.Start(obj);
}
catch (SocketException ex)
{
}
}
}

static void ReadMsg(object obj)
{
Socket socket = (Socket)obj;

byte[] byteMessage = null; ;

while (ServiceStartFlag)
{
try
{
if (socket.Connected)
{
byteMessage = new byte[1000];
int len = socket.Receive(byteMessage);
if (len > 0)
{
string sTime = DateTime.Now.ToShortTimeString();

string msg = sTime + ":" + "Message from: ";

msg += socket.RemoteEndPoint.ToString() + " << " + Encoding.UTF8.GetString(byteMessage);
Console.WriteLine(msg);
byteMessage = null;

byte[] tmpBytes = Encoding.UTF8.GetBytes("Sended Sucessed!\0");

socket.Send(tmpBytes);
}
}
}
catch (SocketException ex)
{
//Console.WriteLine(ex.Message);
}
}
}
}
}