C#的TCP服务器编写

.Net支持异步方式进行网络代码的编写,这样减少了线程的管理的使用。但对性能的改进还没有实际测试。下面是一个简单的TCP服务器编写,但对于接收数据的操作,我发觉只能用线程进行:
 1 public  partial  class  MainForm : Form  {
 2    private Socket serSock;
 3    private Dictionary<IPEndPoint, Socket> clientSockList;
 4
 5    public MainForm() {
 6        InitializeComponent();
 7    }

 8
 9    /**//// <summary>
10    /// 开始监听事件处理
11    /// </summary>
12    /// <param name="sender"></param>
13    /// <param name="e"></param>

14    private void btnStart_Click(object sender, EventArgs e) {
15        serSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
16        EndPoint ep = new IPEndPoint(IPAddress.Any, 8900);
17        serSock.Bind(ep);
18        serSock.Listen(30);
19        clientSockList = new Dictionary<IPEndPoint, Socket>();
20        serSock.BeginAccept(new AsyncCallback(AcceptEnd), null);
21        btnStart.Enabled = false;
22    }

23
24    /**//// <summary>
25    /// 接收客户机连接的方法
26    /// </summary>
27    /// <param name="ar"></param>

28    private void AcceptEnd(IAsyncResult ar) {
29        Socket sock = serSock.EndAccept(ar);
30        IPEndPoint ep = sock.RemoteEndPoint as IPEndPoint;
31        clientSockList[ep] = sock;
32        btnSend.Enabled = true;
33        btnSendFile.Enabled = true;
34        uList.Items.Add(sock.RemoteEndPoint);
35        Thread t = new Thread(new ParameterizedThreadStart(RecThread));
36        t.IsBackground = true;
37        t.Start(sock);
38        serSock.BeginAccept(new AsyncCallback(AcceptEnd), null); //继续接收下一个客户机连接
39    }

40
41    /**//// <summary>
42    /// 接收线程
43    /// </summary>
44    /// <param name="o"></param>

45    private void RecThread(object o) {
46        Socket clientSock = o as Socket;
47        NetworkStream ns = new NetworkStream(clientSock);
48        //对数据的接收写在这里
49    }

50}

以上就是编写TCP服务器的基本模式,不知还有谁有一些更好的模式。这里的TCP接收连接,发送请求等都可以使用异步方式进行。

转载于:https://www.cnblogs.com/Adon/archive/2007/11/15/960904.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你编写一个基本的C# TCP服务器端口程序。以下是一个简单的示例: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; public class TCPServer { public static void Main() { // 服务器IP和端口 string ip = "127.0.0.1"; int port = 8080; // 创建TCP监听器 TcpListener listener = new TcpListener(IPAddress.Parse(ip), port); try { // 启动监听器 listener.Start(); Console.WriteLine("服务器已启动,等待客户端连接..."); while (true) { // 接受客户端连接 TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("客户端已连接"); // 获取客户端的网络流 NetworkStream stream = client.GetStream(); // 读取客户端发送的数据 byte[] buffer = new byte[1024]; int bytesRead = stream.Read(buffer, 0, buffer.Length); string requestData = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("接收到客户端数据:{0}", requestData); // 处理客户端请求(这里仅作为示例,直接返回相同的数据) byte[] responseData = Encoding.ASCII.GetBytes(requestData); stream.Write(responseData, 0, responseData.Length); Console.WriteLine("发送响应数据给客户端:{0}", requestData); // 关闭连接 client.Close(); Console.WriteLine("客户端已断开连接"); } } catch (Exception ex) { Console.WriteLine("服务器发生错误:{0}", ex.Message); } finally { // 停止监听器 listener.Stop(); } Console.ReadLine(); } } ``` 这是一个简单的TCP服务器端口程序,它会监听指定的IP地址和端口,接受客户端连接,并读取客户端发送的数据,然后返回相同的数据给客户端。你可以根据需求进行修改和扩展。请注意,这只是一个基本示例,实际应用中可能需要处理更多的逻辑和错误处理。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值