服务端用java写了一个socket通讯程序,下面是语句部分:
import java.io.*;
import java.sql.*;
import java.net.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.text.*;class ServeOneJabber extends Thread {
private Socket socket; private BufferedReader in; private PrintWriter out; public ServeOneJabber(Socket s) throws IOException {
socket = s;
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
start();
} public void run() {
try {
while (true) {
String str = in.readLine();
System.out.println("接收到的字符串:"+str);
//System.out.println(str);
if (str.equals("CMD_END"))
break;
if(str.equals(null))
break;
//根据收到的数据进行判断并进行处理
String mystr = str.replaceAll("\\*#\\*", ",");
String[] sub = mystr.split(","); //转换成数组 if (sub[0].equals("CMD_LOGIN")) { //用户登录
//具体语句部分略
} } } catch (IOException e) {
} finally {
try {
System.out.println("关闭当前socket...");
socket.close();
} catch (IOException e) {
}
}
}
}public class CmccServer {
static final int PORT = 8808; public static void main(String[] args) throws IOException { ServerSocket s = new ServerSocket(PORT);
System.out.println("服务开始... ");
try {
while (true) { Socket socket = s.accept();
try {
new ServeOneJabber(socket);
} catch (IOException e) { socket.close();
}
}
} finally {
s.close();
}
}
}为什么用java写的客户端程序能正常连接并通讯,而用VB等写的客户端程序能连通java服务端,但是必须手动断开后才能把数据发送到java服务端,并且总会发送一行null数据,另一行数据才是正常发送应该收到的数据?
import java.io.*;
import java.sql.*;
import java.net.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.text.*;class ServeOneJabber extends Thread {
private Socket socket; private BufferedReader in; private PrintWriter out; public ServeOneJabber(Socket s) throws IOException {
socket = s;
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
start();
} public void run() {
try {
while (true) {
String str = in.readLine();
System.out.println("接收到的字符串:"+str);
//System.out.println(str);
if (str.equals("CMD_END"))
break;
if(str.equals(null))
break;
//根据收到的数据进行判断并进行处理
String mystr = str.replaceAll("\\*#\\*", ",");
String[] sub = mystr.split(","); //转换成数组 if (sub[0].equals("CMD_LOGIN")) { //用户登录
//具体语句部分略
} } } catch (IOException e) {
} finally {
try {
System.out.println("关闭当前socket...");
socket.close();
} catch (IOException e) {
}
}
}
}public class CmccServer {
static final int PORT = 8808; public static void main(String[] args) throws IOException { ServerSocket s = new ServerSocket(PORT);
System.out.println("服务开始... ");
try {
while (true) { Socket socket = s.accept();
try {
new ServeOneJabber(socket);
} catch (IOException e) { socket.close();
}
}
} finally {
s.close();
}
}
}为什么用java写的客户端程序能正常连接并通讯,而用VB等写的客户端程序能连通java服务端,但是必须手动断开后才能把数据发送到java服务端,并且总会发送一行null数据,另一行数据才是正常发送应该收到的数据?
1.为什么vb客户端连通时就发一个null到java服务端?
2.还有就是为什么vb客户端必须断开后才能把数据发送到java服务端?
StringBuffer s = null;
int startChar;
boolean omitLF = ignoreLF || skipLF; synchronized (lock) {
ensureOpen(); bufferLoop:
for (;;) { if (nextChar >= nChars)
fill();
if (nextChar >= nChars) { /* EOF */
if (s != null && s.length() > 0)
return s.toString();
else
return null; //<<------HERE
}估计VB在关闭的时候自动发送了一个EOF,而上一次的已经被readLine读过,因而就只有一个null