这里是两个个客户端程序,我连一次服务器,服务器就要发送大概260000字节的数据。但是两个客户端分别都不能完整接收服务器传过来的数据,麻烦大家帮我看看怎么回事啊,谢谢大家。如果有好的代码,谢谢大家给出来。拜托拜托了!这个问题困惑我好几天了!!!程序1如下(一次只能接收到1460字节):
package tcp;import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;public class MyClient {
public static String tcpTest(int port,String ipAdd){
String s="";
try {
Socket socket = new Socket(ipAdd, port);
InputStream is = socket.getInputStream();
int bufSize = socket.getReceiveBufferSize();
byte[] receiveBuffer=new byte[(bufSize<1?1:bufSize)];
int readSize;
StringBuffer s1=new StringBuffer();
while (true) {
readSize=is.read(receiveBuffer);
byte[] b=new byte[readSize];
for(int i=0;i<readSize;i++){
b[i]=receiveBuffer[i];
System.out.println(""+receiveBuffer[i]);
}
System.out.println("sys::"+new String(b));
s=new String(b);
return s;
} } catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
System.out.println("错误");
} finally {
System.out.println("finally");
}
return null;
}
}
程序2如下(一次接收了一万多字节,但是距离二十几万的量还是很远啊):
package tcp;import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class ClientTe {
public static void main(String[] argv){
int port=15199;
String ip="127.0.0.1";
try {
Socket socket=new Socket(ip,port); //建立socket连接
InputStream in=socket.getInputStream(); //获取流
byte[] buff=new byte[100];
int len;
//按每100字节循环
while ((len=in.read(buff))>-1){ //如果len==-1说明已经读到流结尾
System.out.println("re::"+len);
if (len==100){
System.out.println("abc");
//已经读到数据,处理这些数据
for(int i=0;i<100;i++){
System.out.println("ii:"+buff[i]);//打印出每一个字节
}
}else{
for(int i=0;i<len;i++){
System.out.println("ii:"+buff[i]);
}
System.out.println("aa:"+len);
break;//如果不足100字节就跳出循环(流末尾)
}
}
System.out.println("流读完");
in.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}大家帮我看看这两段程序为什么接收的数据都不完整啊?如果有更好的方法,谢谢告诉我,最好有代码。万分感激啊!
package tcp;import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;public class MyClient {
public static String tcpTest(int port,String ipAdd){
String s="";
try {
Socket socket = new Socket(ipAdd, port);
InputStream is = socket.getInputStream();
int bufSize = socket.getReceiveBufferSize();
byte[] receiveBuffer=new byte[(bufSize<1?1:bufSize)];
int readSize;
StringBuffer s1=new StringBuffer();
while (true) {
readSize=is.read(receiveBuffer);
byte[] b=new byte[readSize];
for(int i=0;i<readSize;i++){
b[i]=receiveBuffer[i];
System.out.println(""+receiveBuffer[i]);
}
System.out.println("sys::"+new String(b));
s=new String(b);
return s;
} } catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
System.out.println("错误");
} finally {
System.out.println("finally");
}
return null;
}
}
程序2如下(一次接收了一万多字节,但是距离二十几万的量还是很远啊):
package tcp;import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class ClientTe {
public static void main(String[] argv){
int port=15199;
String ip="127.0.0.1";
try {
Socket socket=new Socket(ip,port); //建立socket连接
InputStream in=socket.getInputStream(); //获取流
byte[] buff=new byte[100];
int len;
//按每100字节循环
while ((len=in.read(buff))>-1){ //如果len==-1说明已经读到流结尾
System.out.println("re::"+len);
if (len==100){
System.out.println("abc");
//已经读到数据,处理这些数据
for(int i=0;i<100;i++){
System.out.println("ii:"+buff[i]);//打印出每一个字节
}
}else{
for(int i=0;i<len;i++){
System.out.println("ii:"+buff[i]);
}
System.out.println("aa:"+len);
break;//如果不足100字节就跳出循环(流末尾)
}
}
System.out.println("流读完");
in.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}大家帮我看看这两段程序为什么接收的数据都不完整啊?如果有更好的方法,谢谢告诉我,最好有代码。万分感激啊!
for(int i=0;i <len;i++){ System.out.println("ii:"+buff[i]);
}
System.out.println("aa:"+len);
break;//如果不足100字节就跳出循环(流末尾)
} 这里不要break。
可能每次接受,不一定保证是100,
反正while循环有结束条件,这里可以不用break,试试
用Socket编写聊天程序,最主要的应该要掌握两点:
第一:服务器端多线程
第二:客户端多线程
而这里的多线程,从你的代码里面没有体现出来,当然,代码不是必须得这样去编写,但是一般来说这是一个规范,而且也是一个很好的思路。
方法:
服务器端:两个线程,一个负责专门等待客户端的连接,核心代码为:Socket client = serverSocket.accept();第二个线程主要负责所有客户端发来的消息的处理。
服务器端:一个线程,就负责接受并解析所有的消息。
严格按照这样的方式去编写代码去改写你的代码的话,很快就会实现的。楼主不妨试一下...
如果需要的话,我可以给你共享一下我以前的代码
rum-lee:接收端程序缓冲区设置成多大比较合适呢?