一个服务器,最多同时有十万个tcp连接,接收的消息有自定义对象和字符串两种。用同步还是用异步合适。开发时应该注意些什么。
我原来用同步。测试时发现,客户端socket.connect()连上服务器后,点button按钮执行socket.send()没问题,但是如果客户端点button按钮执行for(int i=0;i<10;i++){socket.send()}循环发送的话,服务器接收时就只接受到两条,服务器收到的第2条消息,是客户端发的第2-10条的内容的混合。
为什么会出现这个问题。如果改用异步,会不会能避免这种问题。
请教有经验的大牛,小弟初接触开发,希望得到指教。
我原来用同步。测试时发现,客户端socket.connect()连上服务器后,点button按钮执行socket.send()没问题,但是如果客户端点button按钮执行for(int i=0;i<10;i++){socket.send()}循环发送的话,服务器接收时就只接受到两条,服务器收到的第2条消息,是客户端发的第2-10条的内容的混合。
为什么会出现这个问题。如果改用异步,会不会能避免这种问题。
请教有经验的大牛,小弟初接触开发,希望得到指教。
{
socket.Listen(50);
//监听到一个socket连接后,给它单独起一个线程。
Thread thread=new Thread(new ThreadStart(accpet));
thread.Start();
} private void accpet( )
{
try
{
while(run)
{
acceptsocket=socket.Accept(); Thread Tcps=new Thread(new ThreadStar(receive));
Tcps.Start();
}
}
catch(Exception ex)
{
}
} public void receive()
{
...
while(run)
{
try
{
byte[] buffers=new byte[2048];
...
acceptsocket.Receive(buffers);
...这是原来写的服务器端代码
至于第二个问题,那是TCP的“粘包”现象,同步和异步都会出现这样的情况,还有一种情况是一个包被分成两个或更多个包被发送,这些都是在实际编程中要注意并处理的!