做个局域网游戏,服务器用TCPlistener,客户端用Socket,当服务器连续向客户端发送数据时,客户端响应不过来,怎么解决?

问题描述

服务器端根据游戏结果,可能向客户端连续发两条数据(甚至更多条),这是客户端需要作出相应,改变界面,例如更新某个label的text,可是有时服务器发送第一条数据后客户端能正确响应,服务器紧接发第二条时(这是客户端还在做相应第一条的动作,例如播放声音,或者利用循环改变某个picturebox的图像等),客户端就没有反应了,怎么解决?服务器端简化代码:privateVoidSendMessage(stringMsg;{byte[]msgByte=newbyte[65535];stringmsgStr=msg+"rn";msgByte=System.Text.Encoding.BigEndianUnicode.GetBytes(msgStr.ToCharArray());if(socket.Connected)socket.Send(msgByte);}publicbutton1_click(){if(X1<10&&X2>100){SendMessage("login|"+X1.ToString()+"|");SendMessage("welcome|"+X2.ToString()+"|");}else{SendMessage("logout|"+(X2-X1).ToString()+"|");}}客户端:privatevoidbutton1_Click(){ClientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);ClientSocket.Connect(ServerInfo);ClientSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(this.ReceiveCallBack),null);}privatevoidReceiveCallBack(IAsyncResultAR){intREnd=ClientSocket.EndReceive(AR);if(REnd==0)return;stringRec=Encoding.BigEndianUnicode.GetString(MsgBuffer,0,REnd);string[]cmdparams=Rec.Split('|');switch(cmdparams[0]){case"login":showmessage('loginok');playmusic("hello");break;case"welcome"showmessage('welcomed);playmusic("welcome");break;case"logout":showmessage("logoutok");playmusic("byebye");break;}ClientSocket.BeginReceive(MsgBuffer,0,MsgBuffer.Length,0,newAsyncCallback(ReceiveCallBack),null);}当服务器端发送SendMessage("logout|"+(X2-X1).ToString()+"|");客户端能够响应,可是服务器连续发送SendMessage("login|"+X1.ToString()+"|");SendMessage("welcome|"+X2.ToString()+"|");时客户端就处理不了第二条指令了,怎么解决这个问题??

解决方案

解决方案二:
在接收的时候可能因为网络问题你2次发送的时候是在一起异步接收的。。。。所以只接收1次建议发送的时候吧缓冲区填满发送这个样子可以避免2次发送在一次接收里面
解决方案三:
你的判断是否有处理指令!!
解决方案四:
并发的问题。还是多线程的问题。
解决方案五:
To:Deathsign怎么填满?To:yagebu1983处理指令?我对发送过来的数据都进行处理To:liuqian4243我想是多线程的问题我只是在Form_Load中加入了System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=false;没有使用委托。难道是这出了问题???如果定义委托,每个控件都需要定义,而且对每个控件操作有很多可能,例如移动一个label位置,也可能对label进行赋值,这个委托如何定义啊???
解决方案六:
客户端使用线程处理接收信息
解决方案七:
遇到同样的问题,帮顶啊

时间: 2024-09-15 10:13:11

做个局域网游戏,服务器用TCPlistener,客户端用Socket,当服务器连续向客户端发送数据时,客户端响应不过来,怎么解决?的相关文章

asyncsocket 接收数据-AsyncSocket 服务器连续快速发送数据,客户端接收数据部分丢失

问题描述 AsyncSocket 服务器连续快速发送数据,客户端接收数据部分丢失 请问各路大神:使用AsyncSocket时,服务器间断向客户端发送消息接收正常.但是,连续快速发送消息就会出现数据丢失的情况.比如连续发100条,客户端可能会少接收十几条消息.这会是什么原因造成的呢?拜托~~ 解决方案 求大神拯救啊 在线等~~

Android编程向服务器发送请求时出现中文乱码问题的解决方法_Android

本文实例讲述了Android编程向服务器发送请求时出现中文乱码问题的解决方法.分享给大家供大家参考,具体如下: 我们在andorid项目中通过get方式向服务器发送请求,其中url参数带有中文,将会产生乱码,乱码产生的原因有两种: 1. 在提交参数时,没有对中文参数进行URL编码 2. Tomcat服务器默认采用的是IOS8859-1编码(不支持中文)得到参数值 解决: 1. 进入android项目,在其中要提交参数的时候,对参数的值进行编码: 复制代码 代码如下: URLEncoder.enc

解决方案-服务端(C++)处理大量数据时客户端请求会阻塞问题

问题描述 服务端(C++)处理大量数据时客户端请求会阻塞问题 客户端发送大量数据给服务端,服务端是一次性接收1M的数据处理,在处理这些大量数据时,客户端请求获取队列长度,服务端无法及时响应请求.请问各位大神,如何做到客户端请求,服务端立即响应?有没有好的解决方案?谢谢! 解决方案 提高服务器处理努力 加机器 负载均衡

超级网口USR-K3向服务器发送数据时是怎么发的

问题描述 超级网口USR-K3向服务器发送数据时是怎么发的 如题,数据会先发送到哪,服务器从哪里拿到这个值,USR-K3的配置要怎么设才能发送到服务器.

线程-java server端发送数据给客户端出现问题,求高手帮忙看下!

问题描述 java server端发送数据给客户端出现问题,求高手帮忙看下! java server端发送数据给客户端出现问题,求高手帮忙看下! package com.zeph.multiclient; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class MultiThreadServer extends Thread { private Socket client; publ

TCPCLIENT一个客户端同时对多个服务端发送数据

问题描述 现在需求是一个客户端对多个服务端发送数据我的客户端程序是4个新线程,分别连接4个服务端现在出现的问题是发送数据到服务端时,只对一个连接就很快,但是4个同时连接,同时发送就会很慢请问是哪里的问题 解决方案 解决方案二:是带宽的问题,楼主用的是什么网络,家用的网络只是下载很快,上传则是极慢的,这是潜规则.解决方案三:首先,不要扯上什么"线程"概念,这样就能先避免一部分误区.你的进程中有四个TcpClient对象,对象就是对象,跟线程没有半毛钱关系,你把它们安排到程序中作为内存中的

socket通讯 android-请求:java写的客户端发送数据失败!!

问题描述 请求:java写的客户端发送数据失败!! 连接时,给服务端发送数据时总是报错!! 11-28 11:15:36.164: D/MainActivity(4212): wifiname:"LcyAP_03001" prxFlag:true substr: LcyAP FirstConn:true 11-28 11:15:36.164: D/MainActivity(4212): Now Ready to create connect to LC:Now wifi stat is

.NET C/S结构 客户端通过Socket去服务端拿数据库的数据

问题描述 C端不直接访问数据库,C端通过Socket向S端发送指令,获取数据库的数据.如何实现一个函数stringSendCommand(stringCommand)即发送个获取个人信息的指令则返回个人信息的JSON数据.该函数发送请求的指令,返回服务器那边发回来的数据库数据.而不是数据都来源自Socket的Recv事件.同时,又需要Socket监听服务器端推送过来的消息. 解决方案 解决方案二:WCF和TCP长连接吗?解决方案三:我觉得读取数据库这种还是用webservice或者webapi好

做游戏服务器,最好的配置是什么?

游戏服务器租用选择标准是快速.稳定.抗攻击强,然后找正规的.有资质的服务器厂商,然后再比较比较价格,最终找到性价高的游戏服务器. 稳定性好的服务器体验度自然好,也就能吸引更多游戏玩家.所以对于游戏服务器的选择一定要慎重,千万不能一味的追求低价格而忽略了服务器的稳定性.另外,作为服务器提供商的售后服务也很重要,游戏服务器租用肯定会不时的出现问题,这就需要选择像AWS.阿里云这样的优质信誉的云服务器提供商,从服务上说,阿里云一直做的口碑还可以,如果大家不知道怎么选,也可以参考下阿里云的游戏解决方案,