各位。NET高手:求一TCP/IP通讯解决方案
问题需求如下:
服务器一台,客户端若干个。
现在就是要实现服务器和客户端之间的通讯,服务器端如何实现和各个客户端之间通过TCP/IP通讯,并把各个客户端发送过来的数据存储到数据库中。
我在实现P2P的点对点通讯中已经实现了,但在1:N的通讯中不知道怎么设计(架构),在这样的通讯过程中是不是要考虑并发问题?另外我的客户端不是PC,是硬件终端,如:ARM,电子称之类的东西。请各位高手出招。谢谢!
------解决方案--------------------顶。
------解决方案--------------------很好
很强大
------解决方案--------------------多线程监听就可以拉
------解决方案--------------------我以前编写小的程序通常是一个线程监听,再每个线程负责一个socket连接.
------解决方案--------------------首先 服务器侦听 ,得到一个连接之后, 开始一个线程用于时刻接受数据;
并将此连接存放在一个HashTable中
发送数据时候根据HashTable中的key得到连接,向指定的Client发送数据。
大概就是这样的 。有机会可以加MSN:iepshen@hotmail.com 讨论
------解决方案--------------------同意 iepshen 的说法,一般都作法都是一个线程监听端口,如果有连接进来,则为每个连接新开一个线程负责收发数据。不过最好对最大线程数进行些限制,以免出现性能问题。
------解决方案--------------------你可以用异步Socket来处理数据收发任务。然后在线程池中处理数据。关于异步Socket你可以看看我的Blog:http://blog.csdn.net/wzd24 or http://wzd24.cnblogs.com
------解决方案--------------------可以不去设置SockerServer的最大连接数吧
------解决方案--------------------服务器
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace TCPServerDemo
{
   class ClientHandler
   {
       public TcpClient clientSocket;
       public void RunClient()
       {  
           //Create the stream classes
           Console.WriteLine(clientSocket.Client.AddressFamily.ToString());
           StreamReader readerStream = new StreamReader(clientSocket.GetStream());
           NetworkStream writestream = clientSocket.GetStream();
           string returnData = readerStream.ReadLine();
           string userName = returnData;
           Console.WriteLine("Welcome " + userName + " to the Server");
           while (true)
           {
               returnData = readerStream.ReadLine();
               if (returnData.IndexOf("QUIT") > -1)
               {
                   Console.WriteLine("Bye Bye " + userName);
                   break;
               }
               Console.WriteLine(userName + ": " + returnData);
               returnData += "\r\n";
               byte[] dataWrite = Encoding.ASCII.GetBytes(returnData);
               writestream.Write(dataWrite, 0, dataWrite.Length);
           }
           clientSocket.Close();
       }
   }
   public class EchoServer
   {
       const int ECHO_PORT = 8080;
       public static int nClient = 0;
       static void Main(string[] args)
       {
           try
           {  
               //Bind the Server to local port
               TcpListener clientListener = new TcpListener(IPAddress.Parse("127.0.0.1"),ECHO_PORT);
               //start to listen
               clientListener.Start();
               Console.WriteLine("Waiting for connection...");
               while (true)
               {  
                   //Accept the connection
                   TcpClient client = clientListener.AcceptTcpClient();
                   ClientHandler cHandler = new ClientHandler();