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

请教一个Swing的Socket通信的技术问题.
我写了一个Swing的IM,其中有着一块功能:
        
        这是一个“用户兑换授权码”的系统功能。
        现在画红色方框的位置出现了问题:
        用户在C端点击“提交”按钮孩子后,出现了:
        我掐表:“110秒之后”,C端才能够接收到D端服务器的值.
        我的D端写出数据的现场代码如下:
       
if(mytaskstate == 1){
System.out.println("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
D_port_Calc_The_CustomerSysFuctionUserRightsCode cjco = new D_port_Calc_The_CustomerSysFuctionUserRightsCode();
String MyCustomerServiceOrdernum = cjco.getMyUserRights(MyUserRights);
   SocketClient so = new SocketClient(MyObjIP,5555);
String mycustomerordernum = "6丗6丗"+MyCustomerServiceOrdernum+"丠"+"Cus"+"丠"+"99999999"+"丠"+"IneedOrders丮false" +"丗"+"D";
so.writeStr(mycustomerordernum, "ManageOurAuthorizeRightsConfirmCode");
so.getMyResourceBack();
System.out.println("OKay!!The Data I Out put is:"+mycustomerordernum);
}

        我的C端的接收服务器的数据的代码如下:
        
while(true){
Socket s1 = soo1.nextSocket();
IP = s1.getInetAddress();
MyObjIP = IP.toString().substring(1);
synchronized(s1){
try {
buffertemp3 = soo1.read(s1);
} catch (IOException e) {
// TODO Auto-generated catch block
new NoteUserSysIsInDefending();
}
}
//////"D-C传输一笔数据");
// //////////"C端接收到S端的数据!!D-C端系统信道启动!!");
// ////buffertemp3);
//////"C端接收到的数据:buffertemp3----->"+buffertemp3);
System.out.println("GetDportSocket类接收到的服务器的传输数据" + buffertemp3);
String[] bufferData3 = buffertemp3.split("丗");
System.out.println("GetDportSocket类接收服务器传输数据的字符串数组"+bufferData3);
sign3 = Integer.parseInt(bufferData3[0]);
System.out.println("GetDportSocket类接收到的数据第一字段:sign3----->"+sign3);
para3 = Integer.parseInt(bufferData3[1]);
System.out.println("GetDportSocket类接收到的数据第二字段:para3----->"+para3);
SocketInfo = bufferData3[2];
System.out.println("GetDportSocket类接收到的第三字段:SocketInfo----->"+SocketInfo);
MyUserRole = bufferData3[3];
System.out.println("GetDportSocket类接收到的第四字段:MyUserRole----->"+MyUserRole);
MyObjIP = bufferData3[4];
System.out.println("GetDportSocket类接收到的第五字段:MyObjIP----->"+MyObjIP);
MyThreadname = bufferData3[5];
System.out.println("GetDportSocket类接收到的D端的线程:MyThread----->"+MyThreadname);

        现在从console窗口中打印的数据来看:
        D端已经接收并且发出了自己在图片中的“回写数据”,但是,现在小弟遇到的场景是:
        C端在小弟多次掐表到110秒后,才打印出我想要的数据:
        D端服务器的回写数据.
        我用的“SocketServer”与“SocketClient”两个Socket API,是经过了我数千次测试成功的绝对好用的武器.
        这里面他们肯定能够担负起在网络中读写数据的任务.
        但是,现在我遇到的问题是:
        S端回写的数据,我第一时间接收到了,可是D端服务器的回写数据,我经过多次测试,总是在写出数据后110左右的时间点上C端才能够接受到数据.
        我是采用“本地测试”环境进行的上述测试的进行的.
        希望高手,组织能够指导:
        我的程序,什么地方有问题,导致了“我的程序的这个让用户抓墙”的故障?
        希望能够得到CSDN总部版主,路过的开发者,还有广大的社区牛人的解答.
        我把我的API贴到下面:
        
package c_port_packageBJTeacher;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
 
public class SocketServer {
    private ServerSocket ss = null;
    private Map<Socket, BufferedReader> rm = new HashMap<Socket, BufferedReader>();
    private Map<Socket, PrintWriter> wm = new HashMap<Socket, PrintWriter>();
    String MyKey = "CJCO5888CJCO";
    BufferedReader br = null;
    PrintWriter pw = null;
 
    public SocketServer(int port) {
        try {
            ss = new ServerSocket(port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public Socket nextSocket() {