当前位置:编程学习 > JAVA >>

请教一个Java代码的Socket通信的调试问题.

高手,您好:
    我在写一个Socket通信的程序,我的代码,碰到了一个小问题:
    我的C端的“登录功能代码块”如下:
    
				System.out.println("进入try");
System.out.println("进入try1");
DataInputStream dips1 = new DataInputStream(so1
.getInputStream());
DataOutputStream dops12 = new DataOutputStream(so1
.getOutputStream());
System.out.println("进入try2");
buffertemp = dips1.readUTF();
System.out.print(buffertemp);
System.out.println("进入try3");
System.out.println("C_port_connect" + "I'm_Doctor_From_BeiJing");
System.out.println(buffertemp);
buffer = buffertemp.split("[#]");
System.out.println("S:" + buffer);
condition = Integer.parseInt(buffer[0]);
System.out.println("S:" + condition);
MyInfo = buffer[1];
System.out.println(MyInfo);
System.out.println("MyInfo:" + MyInfo);
MySysRole = buffer[2];
MyRole = buffer[3];
MySysNum = buffer[4];

    我的“S端的主框架类,Ch乤:atServer类的源代码如下:
    
package s_port_package_BeiJing;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.concurrent.ArrayBlockingQueue;

import javax.swing.JFrame;

public class ChatServer extends JFrame {
/**
 * ChatServer.java 2013-5-9
 * 
 * @author cjco
 */
// 全局定义区域:定义各种成员变量;
int SysPreDoctorNum = 2000;
int SysPreCustomerNum = 2000;
static Integer MyMEMNum = 202;
static Integer MyCUSNum = 202;
static String D_PORT_SERVER = "127.0.0.1";
static String S_PORT_SERVER = "127.0.0.1";
static String C_PORT_CLIENT = "127.0.0.1";
static String[] bufMemUID = new String[MyMEMNum];
static String[] bufMemPWD = new String[MyMEMNum];
static String[] bufCusUID = new String[MyCUSNum];
static String[] bufCusPWD = new String[MyCUSNum];
String MyMemIDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "registeredMemUID.txt";
String MyMemPWDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "registeredMemPWD.txt";
String MyCustomerIDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "CustomerID.txt";
String MyCustomerPWDPath = "D:" + File.separator + "MyDoc" + File.separator
+ "Sport" + File.separator + "CustomerPWD.txt";
String MyRole = null;
String MySysNum = null;
ServerSocket ss1 = null;
String buffertemp = null;
String MyInfo = null;
String[] buffer = null;
String MySysRole = null;
public static int Index = 0;
static int num = 0;
int[] a = null;
int para = -1;
int condition = -1;
private static final long serialVersionUID = 1L;
boolean started = false;
static Socket so1;
static Socket so2;
File f = null;
static int PM_linknumlog = 0;
DataOutputStream dops2 = null;
DataOutputStream dips2 = null;
DataOutputStream dops12 = null;
public static int[] LocalDoctoronline = new int[MyMEMNum];
public int[] LocalDoctoronlineCondition = new int[MyMEMNum];
public int[] Doctorcomplicatingnum = new int[MyMEMNum];
ArrayBlockingQueue<String> sportmessagelist = new ArrayBlockingQueue<String>(
100000, true);
public static MyMemHashMap mapDoctoronline = new MyMemHashMap();
public static MyCusHashMap mapCustomeronline = new MyCusHashMap();
public static ArrayBlockingQueue<String> GoalDoctorchatwordlist = null;
public static ArrayBlockingQueue<String> GoalCustomerchatwordlist = null;
public static ArrayBlockingQueue<DataOutputStream> GoalDoctorSendInfo = null;
public static ArrayBlockingQueue<DataOutputStream> GoalCustomerSendInfo = null;

public static void main(String[] args) {
try {
so2 = new Socket(D_PORT_SERVER, 9999);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new ChatServer().start();
}

// “C端用户的其他Socket请求的"交给线程处理"动作。
public void start() {
try {
dops2 = new DataOutputStream(so2.getOutputStream());
dops2
.writeUTF("0#0#BeiJingWangFuZhongXiJieHeYiYuan#0#Start#S#BeiJing");
dops2.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ReadTxt.read(MyMemIDPath);
int numID = ReadTxt.logData.size();

for (int i = 0; i < numID; i++) {
bufMemUID[i] = ReadTxt.logData.get(i);
}
ReadTxt.logData.clear();
ReadTxt.read(MyMemPWDPath);
int MemnumPWD = ReadTxt.logData.size();
for (int i = 0; i < MemnumPWD; i++) {
bufMemPWD[i] = ReadTxt.logData.get(i);
}
ReadTxt.logData.clear();
ReadTxt.read(MyCustomerIDPath);
numID = ReadTxt.logData.size();
System.out.println(numID);
for (int i = 0; i < numID; i++) {
bufCusUID[i] = ReadTxt.logData.get(i);
}
ReadTxt.logData.clear();
ReadTxt.read(MyCustomerPWDPath);
int CusnumPWD = ReadTxt.logData.size();
for (int i = 0; i < CusnumPWD; i++) {
bufCusPWD[i] = ReadTxt.logData.get(i);
}
GoalDoctorchatwordlist = new ArrayBlockingQueue<String>(100000, true);
GoalCustomerchatwordlist = new ArrayBlockingQueue<String>(100000, true);
GoalDoctorSendInfo = new ArrayBlockingQueue<DataOutputStream>(
SysPreDoctorNum, true);
GoalCustomerSendInfo = new ArrayBlockingQueue<DataOutputStream>(
SysPreCustomerNum, true);

ReadTxt.logData.clear();
try {
Arrays.fill(LocalDoctoronline, 0);
// TODO Auto-generated method stub
ss1 = new ServerSocket(8888, 50);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true) {
// 创建绑定到端口8888的ServerSocket对象
try {
so1 = ss1.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(so1 + "|||---");
System.out.println("服务器正在对8888端口进行监听");
// 服务器循环接受客户端的请求,为不同的客户端提供服务
try {
System.out.println("进入try");
System.out.println("进入try1");
DataInputStream dips1 = new DataInputStream(so1
.getInputStream());
DataOutputStream dops12 = new DataOutputStream(so1
.getOutputStream());
System.out.println("进入try2");
buffertemp = dips1.readUTF();
System.out.print(buffertemp);
System.out.println("进入try3");
System.out.println("C_port_connect" + "I'm_Doctor_From_BeiJing");
System.out.println(buffertemp);
buffer = buffertemp.split("[#]");
System.out.println("S:" + buffer);
condition = Integer.parseInt(buffer[0]);
System.out.println("S:" + condition);
MyInfo = buffer[1];
System.out.println(MyInfo);
System.out.println("MyInfo:" + MyInfo);
MySysRole = buffer[2];
MyRole = buffer[3];
MySysNum = buffer[4];
if (MySysRole.equals("D")) {
ManageTheChannel3RecvUserAccountLoopSendClientNum mb = new ManageTheChannel3RecvUserAccountLoopSendClientNum(
"Thread_3", MyInfo, this, dops12);
mb.start();
} else {
if (Integer.parseInt(MySysNum) == 200) {
if (MyRole.equals("Doctor")) {
LocalDoctoronline[Integer.parseInt(MySysNum)] = 1;
LocalDoctoronlineCondition[Integer
.parseInt(MySysNum)] = 1;
}
}
switch (condition) {
case 0: {// 已对照完毕.
ManageTheChannel0ConfirmandSaveDS obj0 = new ManageTheChannel0ConfirmandSaveDS(
dops12, this, MyInfo);
Thread m0 = new Thread(obj0, "MyThread1");
m0.start();
break;
}
case 1: {
Complete_ManageTheChannel1SendInfo m1 = new Complete_ManageTheChannel1SendInfo(
"Thread2", this, MyInfo);
m1.start();
break;
}
case 2: {// 已对照完毕.
ManageTheChannel2ExitSysGivOrderNum m2 = new ManageTheChannel2ExitSysGivOrderNum(
dops12, "Thread3", MyInfo, this);
m2.start();
break;
}
case 3: {
}
case 4: {
ManageTheServiceValueForEnterprise m4 = new ManageTheServiceValueForEnterprise(
MyInfo, dops12);
m4.start();
}
case 6: {
GetOurServiceWorkValue m6 = new GetOurServiceWorkValue(
MyInfo, dops12);
m6.start();
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}

    高手,上述的弟我的代码,C端和S端的运行结果是:
     Java socket 调试 服务器 通信 --------------------编程问答-------------------- 问题是啥??? --------------------编程问答-------------------- 不好意思,灌水哥,诸位高手,我的问题是:
    为什么我的程序,ChatServer类的第160行的“进入try3”这句话,为什么在我贴出的图片中,没有打印出来...?
    希望灌水哥,诸位高手,能够帮助我. --------------------编程问答-------------------- buffertemp = dips1.readUTF();
这里的DataInputStream中的readUTF()方法是阻塞的
也就是说你这里没读出数据就不会往下走了。。
你获取inputStream
read()一下,看看inputStream内数据是否为空或者不正常
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,