日期:2014-05-20  浏览次数:20772 次

求高手点拨Socket通信中的一个“字节流文本传输代码实现效果与预期不符”的问题原因..
高手,您好:
    我在写一个Socket通信程序,现在我碰到了一个问题..
    在进行Socket通信的时候,我写出了一个C端的测试类,源代码如下:
    
package s;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class C_port {
Socket s = null;
OutputStream dops = null;
public C_port(){
try {
s = new Socket("127.0.0.1",60000);
dops = new DataOutputStream(s.getOutputStream());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String str = "CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,今天我建群,加入了130个人\r\n我们群里的人,都决心互相学习,增长本领";
byte[] b = str.getBytes();
int len = b.length;
try {
dops.write(b,0,len);
dops.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args){
new C_port();
}

}

    S端的代码如下:
    (S端的入口类..)
    
package s;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class S_port {
String str = "";
ServerSocket s =null;
Socket so = null;
S_port(){
try {
s = new ServerSocket(60000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true){
try {
so = s.accept();
break;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SystemThread m1 = new SystemThread(so);
m1.start();
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args){
new S_port();
}
}

    (S端的子线程..)
    
package s;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class SystemThread extends Thread{
Socket so = null;
DataInputStream dips = null;
InputStream inputstream = null;
String str = null;

public SystemThread(Socket s){
so = s;
}

public void run(){
byte[]   buf   =   new   byte[2048*512];   

        int num = 0;
        try {
inputstream = so.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
        
        while   (num   !=   (-1))   {//是否读完所有数据   
                try {
num   =   inputstream.read(buf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//继续从网络中读取文件   
        }   
str = new String(buf);
System.out.println(str);
}
}

    高手,经过运行,我的S端的console窗口输出如下:
    
    希望高手能够点拨:
    为什么我的C端的写出数据为:
    “CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,今天我建群,加入了130个人\r\n我们群里的人,都决心互相学习,增长本领”.
    在我的S端的console窗口中的输出却为:
    “我们群里的人,都决心互相学习,增长本领”.
    少了前面的:
    “CJ必胜!!CJCO!!CJHMF,这个问题解决了,我高兴了,今天我建群,加入了130个人\r\n”.
    的字符串数据...
    希望高手能够点拨我这个问题出现的原因..
    谢谢高手!!
    一百分奉上!!
                                                                       一位求知者