socket 多个客户端问题

问题描述

今天遇到一个问题,多个服务器,都知道IP,只有一个上位机,要做成服务器listening,等待上位机来connect,请问这样的程序应该怎么写?总不能一个线程connect(IP1);在一个线程connect(IP2);........

解决方案

解决方案二:
觉得你可能还不了解Tcp/Ip在.net中的实现,去看看Socket相关的类,做一个简单的例子
解决方案三:
这个微软有例子的
解决方案四:
能不能说得具体点?
解决方案五:
微软的例子不好虽然能运行但不好上网上找别的例子去
解决方案六:
privatestringReceiveMessage(){LogWritelogWrite=null;NetworkStreamWrapnetworkStreamWrap=null;try{byte[]arrbyteReceive=newByte[10];intiReceiveTimeOut=this.m_updateServerParas.ReceiveTimeOut;intiSendTimeOut=this.m_updateServerParas.SendTimeOut;this.m_socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,iReceiveTimeOut*1000);this.m_socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.SendTimeout,iSendTimeOut*1000);networkStreamWrap=newNetworkStreamWrap(this.m_socket,LOGDIR);networkStreamWrap.ReadX(arrbyteReceive,0,arrbyteReceive.Length,LOGDIR);intiMessageLen=GetMessageLen(arrbyteReceive);logWrite=newLogWrite("Update","Info","要接收的报文长度为"+iMessageLen.ToString(),"");arrbyteReceive=newByte[iMessageLen];networkStreamWrap.ReadX(arrbyteReceive,0,arrbyteReceive.Length,LOGDIR);return(Encoding.Default.GetString(arrbyteReceive));}catch(System.Exceptionex){if((exisSocketException)||(exisObjectDisposedException)){logWrite=newLogWrite("Update",ex,"接收客户端报文时出错。");thrownewCommunicationException("网络通讯错误:接收客户端报文时出错。");}else{logWrite=newLogWrite("Update",ex,"接收客户端报文时出错。");throw;}}finally{if(networkStreamWrap!=null){networkStreamWrap.Close();}}}

解决方案七:
privatevoidDealRequest(){LogWritelogWrite=null;try{stringsClientIp=((IPEndPoint)this.m_socket.RemoteEndPoint).Address.ToString();stringsConnectTime=DateTime.Now.ToString("yyyy-MM-ddHH:mm:ss");stringsMessage=ReceiveMessage();logWrite=newLogWrite("Update","Info","接收到客户端:"+sClientIp+"发来的报文:["+sMessage+"]","");stringsRequestType=sMessage.Substring(0,2);switch(sRequestType){case"00":stringsUpdateFilesList="";try{//sUpdateFilesList+=GetUpdateFilesList(Application.StartupPath);sUpdateFilesList+=GetUpdateFilesList();if(sUpdateFilesList!=""){sUpdateFilesList=sUpdateFilesList.Substring(0,sUpdateFilesList.Length-1);}}catch(GetUpdateFilesListExceptiongetEx){logWrite=newLogWrite("Update",getEx,"在获得更新文件列表时出错。");sUpdateFilesList+="Error";}logWrite=newLogWrite("Update","Info","要发送给客户端:"+sClientIp+"的报文为:["+sUpdateFilesList+"]");SendMessage("00"+sUpdateFilesList);break;case"01":stringsFileName=sMessage.Substring(2);FileStreamWrapfileStreamWrap=null;BinaryReaderbReader=null;NetworkStreamWrapnetworkStreamWrap=null;try{fileStreamWrap=newFileStreamWrap(Application.StartupPath+"\"+sFileName,FileMode.Open,FileAccess.Read,FileShare.Read,LOGDIR);bReader=newBinaryReader(fileStreamWrap.fileStream);System.Int64iFileLen=bReader.BaseStream.Length;StringsMsgLen=((Int64)(iFileLen+19+2+1)).ToString();DateTimetimeFile=FileWrap.GetLastWriteTime(Application.StartupPath+"\"+sFileName,LOGDIR);StringsSend=sMsgLen.PadLeft(10,'0')+"01"+timeFile.ToString("yyyy-MM-ddHH:mm:ss")+"|";logWrite=newLogWrite("Update","Info","发送给客户端:"+sClientIp+"的文件内容报文中,前段的报文内容:["+sSend+"]");byte[]arrbyteSend=Encoding.Default.GetBytes(sSend);networkStreamWrap=newNetworkStreamWrap(this.m_socket,LOGDIR);networkStreamWrap.Write(arrbyteSend,0,arrbyteSend.Length,LOGDIR);logWrite=newLogWrite("Update","Info","成功将文件内容报文中前段的报文内容发送给客户端:"+sClientIp);logWrite=newLogWrite("Update","Info","开始将文件:"+sFileName+"的内容发送给客户端:"+sClientIp);arrbyteSend=newByte[iFileLen];bReader.Read(arrbyteSend,0,arrbyteSend.Length);networkStreamWrap.Write(arrbyteSend,0,arrbyteSend.Length,LOGDIR);logWrite=newLogWrite("Update","Info","成功将文件:"+sFileName+"的内容发送给客户端:"+sClientIp);}catch(FileAccessExceptionfileAccessEx){logWrite=newLogWrite("Update",fileAccessEx,"文件访问错误,因此将空报文返回给客户端。");SendMessage("01");}catch(StreamAccessExceptionstreamAccessEx){logWrite=newLogWrite("Update",streamAccessEx,"文件访问错误,因此将空报文返回给客户端。");SendMessage("01");}finally{if(bReader!=null){bReader.Close();}if(fileStreamWrap!=null){fileStreamWrap.Close();}if(networkStreamWrap!=null){networkStreamWrap.Close();}}break;

看得懂不?
解决方案八:
protectedoverridevoidOnStart(string[]args){try{LogInfologInfo=null;LogOperatelogOperate=newLogOperate(LOGDIR);LogWritelogWrite=null;try{logInfo=newLogInfo("开始启动自动更新服务","");logOperate.Write(logInfo);this.m_serverParas=newServerParas(this.m_sServerConfigFile);ThreadWrapthreadListenWrap=newThreadWrap(newThreadStart(Listen),LOGDIR);threadListenWrap.thread.IsBackground=true;threadListenWrap.Start(LOGDIR);logInfo=newLogInfo("成功启动自动更新服务","");logOperate.Write(logInfo);}catch(System.Exceptionex){logWrite=newLogWrite("Update",ex,"在启动自动更新服务时出错。");throwex;}}catch{}}protectedoverridevoidOnStop(){try{LogOperatelogOperate=null;LogInfologInfo=newLogInfo("停止自动更新服务","");logOperate=newLogOperate("Update");;logOperate.Write(logInfo);}catch{}}privatevoidListen(){try{LogWritelogWrite=null;try{TcpListenerWraptcpListenerWrap=newTcpListenerWrap(int.Parse(this.m_serverParas.updateServerParas.ListenPort),LOGDIR);tcpListenerWrap.Start(LOGDIR);while(true){SocketsocketAccept=tcpListenerWrap.AcceptSocket(LOGDIR);UpdateUserConnectionuserConnection=newUpdateUserConnection(socketAccept,this.m_serverParas.updateServerParas);userConnection.Start();}}catch(System.Exceptionex){logWrite=newLogWrite("Update",ex,"自动更新服务在监听客户端连接时出错。");throwex;}}catch{}}

在给你补个
解决方案九:
你这个是上位机还是服务器,我是想说得是上位机是客户端,我们现在要求是有很多个装置,每个装置都有个固定的IP,上位机是TcpClient。
解决方案十:
该回复于2012-01-19 13:52:39被版主删除

时间: 2024-10-08 11:39:50

socket 多个客户端问题的相关文章

android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上

问题描述 android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上 客户端通过socket通信,完成读取服务端的二进制数据读取,并将数据显示在textview控件上,数据全为整型 解决方案 之前接触一些,但不是我我写的.JNI中C读取,生成Native方法.上层调用 解决方案二: 底层c来封装so文件调用socket API.上面Java调用so 解决方案三: ....java自己有socket啊,ls各位回答的什么意思.... 简单的socket网上教

TCP通信socket异步,客户端报异常:目标主机积极拒绝

问题描述 TCP通信socket异步,客户端报异常:目标主机积极拒绝 服务端只监听时,客户端建立1500个连接请求都可以正常建立连接,但当服务端改成建立连接后触发一个事件给客户端发送数据时,客户端异常:目标主机积极拒绝,只能建立部分连接.是何原因,希望有老师可以指点一下.不胜感激!! 解决方案 Socket(Tcp)通信客户端 解决方案二: 客户端接收的数据是否正确处理,然后就是看一下你服务器发送数据给客户端后,是不是关闭了连接

网络编程-c++,socket,没启动客户端,服务端显示已有204.204.204.204的ip连接了

问题描述 c++,socket,没启动客户端,服务端显示已有204.204.204.204的ip连接了 #include "stdafx.h" #include "winsock2.h" #include "iostream" #pragma comment (lib,"ws2_32") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { WSADATA ws

scoket tcp ip 报文-Java 的 Socket服务端客户端以tcp/ip协议发送接收报文

问题描述 Java 的 Socket服务端客户端以tcp/ip协议发送接收报文 代码谁有模板,比如给你一个login报文,logout报文!!急急急!!! 解决方案 Android Socket 编程(WIFI 和 ADB) 有了发送数据的功能,再发送文件还需要分包等协议. 解决方案二: 这个不知道是不是你要的答案, 解决方案三: http://blog.csdn.net/u013301192/article/details/46336719 解决方案四: 网页上的1楼回复应该对你有用,祝你好运

用socket编写的客户端和服务端,客户端可以通过服务端的域名发送消息吗

问题描述 用socket编写的客户端和服务端,客户端可以通过服务端的域名发送消息吗 本来要做GPRS通信模块发送命令到服务器端,服务器端根据命令做出反应,如果命令有需要还要返回数据到Gprs模块.网上搜怎么做,都是说用sokect做,我需要的是GPRS模块通过服务器的域名发送消息到服务端. 解决方案 如果是socket的话,gethostbyname是可以将域名转换成ip地址的 解决方案二: Linux socket客户端和服务端socket通讯 客户端和服务端socket的客户端和服务端的编程

Socket实现聊天客户端

今天在极客学院上看到了一个关于Socket的视频讲解,感觉还不错,就写了份代码,拿来分享一下. Socket使用方法 关于Socket的使用,我们首先要弄清楚的是,在服务器端还是在客户端使用.因为这的确是很重要的. 对于客户端,需要使用new Socket(ip,port)就可以了. 对于服务器端的话,我们需要借助于ServerSocket 的accept方法获得与特定的客户端相关联的Socket实例. 然后通信的双方借助于socket里面的方法,获得输出流和输入流完成相关的通信的逻辑处理就可以

Socket服务器和客户端单项通讯

问题描述 Android客户端连接不上服务器是什么原因啊?求大神指教,拜谢!服务器的代码!importjava.io.IOException;importjava.io.OutputStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassSimpleServer{publicstaticvoidmain(String[]args){//创建一个ServerSocket,用于监听客户端Socket的连接请求try{Se

Java Socket 如何判断客户端断开

问题描述 我做了个多线程的服务器程序线程中等待客户端的消息部分代码如下:booleandone=clientRequest.isConnected();//判断客户端Socket是否连接while(done)//客户端是连接的{try{input=clientRequest.getInputStream();Binput=newBufferedInputStream(input);str=""+Binput.read();if(Binput.read()!=-1)//如果客户端有消息就

socket系列之客户端socket——Socket类

假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含很多方法用于建立连接,操作数据流等.客户端按以下几步进行工作:① 创建一个Socket实例,构造函数直接指定远程服务器IP跟端口,建立一个TCP连接.② 通过这个Socket实例的输入输出流进行通信,Socket实例都包含一个InputStream对象和OutputStream对象,通过操作这些流就