各位。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();