Socket通信,客户端和服务的互相收发------客户端接收代码块执行不了

问题描述

publicstaticvoidmain(String[]args)throwsException{ServerSocketss=newServerSocket(9052);System.out.println("开始等待某个连接");do{Sockets=ss.accept();System.out.println("获取到一个连接");DataInputStreamin=newDataInputStream(s.getInputStream());byte[]result=newbyte[100000];intthislength=0;inttotallength=0;do{thislength=in.read(result,totallength,2000);if(thislength>0){totallength+=thislength;}}while(thislength>0);byte[]response=newbyte[totallength];System.arraycopy(result,0,response,0,totallength);StringresponseStr=newString(response);System.out.println("服务端接收:"+responseStr);Stringstr="服务端发送"+responseStr;DataOutputStreamout=newDataOutputStream(s.getOutputStream());out.write(str.getBytes());System.out.println(str);out.flush();}while(true);//ss.close();}

这是我测试用的服务端的代码,能收发

解决方案

解决方案二:
publicstaticvoidmain(String[]args)throwsException{inti=0;while(i<10){Sockets=newSocket("127.0.0.1",9052);Stringstr="客户端发送"+i;DataOutputStreamout=newDataOutputStream(s.getOutputStream());out.write(str.getBytes());System.out.println(str);out.flush();//到这里就执行不下去了DataInputStreamin=newDataInputStream(s.getInputStream());byte[]result=newbyte[100000];intlen;intthislength=0;inttotallength=0;do{thislength=in.read(result,totallength,2000);if(thislength>0){totallength+=thislength;}}while(in.available()>0);byte[]response=newbyte[totallength];System.arraycopy(result,0,response,0,totallength);StringresponseStr=newString(response);System.out.println("服务端接收:"+responseStr);out.close();in.close();i++;}}

如果把DataInputStreamin=newDataInputStream(s.getInputStream());byte[]result=newbyte[100000];intlen;intthislength=0;inttotallength=0;do{thislength=in.read(result,totallength,2000);if(thislength>0){totallength+=thislength;}}while(in.available()>0);byte[]response=newbyte[totallength];System.arraycopy(result,0,response,0,totallength);StringresponseStr=newString(response);System.out.println("服务端接收:"+responseStr);out.close();in.close();

这一段注释掉就能执行了但是不能接收啊求大家帮忙解决……
解决方案三:
引用1楼barrons的回复:

publicstaticvoidmain(String[]args)throwsException{inti=0;while(i<10){Sockets=newSocket("127.0.0.1",9052);Stringstr="客户端发送"+i;DataOutputStreamout=newDataOutputStream(s.getOutputStream());out.write(str.getBytes());System.out.println(str);out.flush();//到这里就执行不下去了DataInputStreamin=newDataInputStream(s.getInputStream());byte[]result=newbyte[100000];intlen;intthislength=0;inttotallength=0;do{thislength=in.read(result,totallength,2000);if(thislength>0){totallength+=thislength;}}while(in.available()>0);byte[]response=newbyte[totallength];System.arraycopy(result,0,response,0,totallength);StringresponseStr=newString(response);System.out.println("服务端接收:"+responseStr);out.close();in.close();i++;}}

如果把DataInputStreamin=newDataInputStream(s.getInputStream());byte[]result=newbyte[100000];intlen;intthislength=0;inttotallength=0;do{thislength=in.read(result,totallength,2000);if(thislength>0){totallength+=thislength;}}while(in.available()>0);byte[]response=newbyte[totallength];System.arraycopy(result,0,response,0,totallength);StringresponseStr=newString(response);System.out.println("服务端接收:"+responseStr);out.close();in.close();

这一段注释掉就能执行了但是不能接收啊求大家帮忙解决……

这里的是我的测试用的客户端代码
解决方案四:
引用2楼barrons的回复:

Quote: 引用1楼barrons的回复:
publicstaticvoidmain(String[]args)throwsException{inti=0;while(i<10){Sockets=newSocket("127.0.0.1",9052);Stringstr="客户端发送"+i;DataOutputStreamout=newDataOutputStream(s.getOutputStream());out.write(str.getBytes());System.out.println(str);out.flush();//到这里就执行不下去了DataInputStreamin=newDataInputStream(s.getInputStream());byte[]result=newbyte[100000];intlen;intthislength=0;inttotallength=0;do{thislength=in.read(result,totallength,2000);if(thislength>0){totallength+=thislength;}}while(in.available()>0);byte[]response=newbyte[totallength];System.arraycopy(result,0,response,0,totallength);StringresponseStr=newString(response);System.out.println("服务端接收:"+responseStr);out.close();in.close();i++;}}

如果把DataInputStreamin=newDataInputStream(s.getInputStream());byte[]result=newbyte[100000];intlen;intthislength=0;inttotallength=0;do{thislength=in.read(result,totallength,2000);if(thislength>0){totallength+=thislength;}}while(in.available()>0);byte[]response=newbyte[totallength];System.arraycopy(result,0,response,0,totallength);StringresponseStr=newString(response);System.out.println("服务端接收:"+responseStr);out.close();in.close();

这一段注释掉就能执行了但是不能接收啊求大家帮忙解决……

这里的是我的测试用的客户端代码

项目要求是要求字节流互相收发
解决方案五:
System.out.println("服务端接收:"+responseStr);

服务端能执行到这句么,感觉很悬呢
解决方案六:
thislength=in.read(result,totallength,2000);

你调试下,应该阻塞在这,这种交互你需要一个简单的协议,另外data装饰类没太大意义
解决方案七:
我记得thinkinginjava里说过available()得谨慎使用......还有dowhile...不是不推荐用吗DataInputStream是专门格式化读取的你怎么还用read()了......
解决方案八:
客户端10次循环,10个socket共用一个端口怎么可能
解决方案九:
引用7楼abcdefghiijklmnopqrs的回复:

客户端10次循环,10个socket共用一个端口怎么可能

好久没用socket了想多了.上面完全错了

时间: 2024-09-29 15:35:27

Socket通信,客户端和服务的互相收发------客户端接收代码块执行不了的相关文章

Java Socket通信(一)之客户端程序 发送和接收数据_java

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据. 对于Socket通信简述,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容.Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容. 例1:客户端的简略写法(一). Socket clien

.Net网络编程——使用TcpClient与TcpListener建立客户端与服务端连接

              一,.NET中如何实现建立连接                         在网络中,我们可以通过IP地址唯一定位一台主机,而在主机中,我们要确定收到的数据包发给谁,可以通过端口号,端口号的作用简单说就是不至于使你要发给QQ好友的消息数据包被错误发到了你的OC程序上.               通常,我们把发起连接的那一端称为客户端,这是主动的一方:而静默等待连接到来的那一端作为服务端.这个概念是比较相对的.               在.Net中,我们可以使

通讯-C#有关于Socket通信的问题

问题描述 C#有关于Socket通信的问题 我用VB做客户端向C#服务器发送Byte数组,C#服务器接收到第一次结果是正确的,但是发送第二次,就只能接收到一堆0了,经过调试发现发送是没有问题的,问题就出在第二次接收的时候接收不到数据,我用字符串不会出现这种问题,请问是哪里粗了问题 解决方案 什么协议?udp么?你是怎么接收的,贴出代码

Windows下php socket通信怎么实现多线程操作?

问题描述 Windows下php socket通信怎么实现多线程操作? php socket通信,我想实现多个客户端可以独立连接,接受发送数据,不知道怎么实现,是在Windows下的, 解决方案 创建线程池,每一个链接都对应一个线程

客户端和服务端通过建立socket通信,协议是tcp/ip

问题描述 客户端和服务端通过建立socket通信,协议是tcp/ip 有一个问题咨询:一个客户端和一个服务端通过tcp/ip连接(之间建立socket通信),在不断网的情况下,服务端关闭,客户端报警,重新开启服务器,客户端能够重新连接上服务端,但是如果拔掉网线,客户端就连接不上服务端了,但从服务端发送过来的数据还是可以读到,可是从客户端发送的数据不能到达服务端,这是为什么??? 解决方案 TCP的客户端和服务端通信socket 客户端和服务端的TCP基本通信简单的Socket通信客户端和服务端

AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍      在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA中间Socket/Tcp框架进行了总体的介绍,我们知道 AgileEAS.NET SOA中间件Socket/Tcp框架是一套Socket通信的消息中间件: 二.简单例子-实现简单的服务器客户段消息应答      我们接下来实现一个简单的例子,例子的场景非常的简单,客户端向服务端发送一个请求

java-使用socket通信服务端如何处理客户端请求

问题描述 使用socket通信服务端如何处理客户端请求 场景如下: 一个服务端,一个客户端通过socket连接服务端,假如客户端要请求服务端做一件事(如调用服务端A类的a方法), 因为socket传输的是字符串,所以我现在的做法是让客户端传一个标识符a到服务端,然后服务端 通过判断传过来的是a则调用A类的a方法, 如果我要执行A类的b方法,则传b过去再判断 我想问的是有没有更好的解决方案,或现成的框架可用 解决方案 如果你这样的需求,我觉得更适合HTTP.也许玩C++的更习惯于socket.之前

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

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

java写的服务端和c语言写的客户端的socket通信问题

问题描述 近遇到一个问题,同学用java语言写了一个服务端,我这边用c语言写了一个客户端,服务端先启动后客户端启动,连接成功,然后客户端取出本地的MAC地址传送给服务端,服务端收到后将这个MAC地址作为KEY,把这次的通信通道作为VALUE存入到定义好的一个map中.然后服务端从map中找到这个通道,并使用这个通道给客户端发消息,第一次发送成功.但是第二次想给客户端发送消息时,要根据KEY从map中取通道的时候,取出来的通道却为NULL,这是怎么回事呢???另外,在服务端的机子上,用telnet