在Socket编程中,我再服务端写了如下代码
while (true) {
int port = Integer.parseInt(textField.getText());
try {
ServerSocket serverSocket = new ServerSocket(port);
Socket sk = serverSocket.accept();
BufferedReader bReader = new BufferedReader(
new InputStreamReader(sk.getInputStream()));
textArea.setText(bReader.readLine());
serverSocket.close();
bReader.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
这个方法是监听一个button按钮的,这个按钮的功能就是打开一个服务端口。我用了一个while(true),虽然是死循环,但是这样子为什么程序就不能运行呀?我知道这个可以用线程来解决,但是我觉得我自己这样写也没有错啊?至少程序可以运行吧。但是现在的问题是程序居然不能运行了,ServerSocket serverSocket = new ServerSocket(port);当运行到这句的时候,程序应该会停下来,发生阻塞。监听客户端的信息!所以这个循环式成立的呀?为什么不能执行?
------解决方案--------------------
这样每次循环都是一个新的Server吧,把创建Serversocket的代码移到while循环外面,每次关闭socket就可以了,这个都是同一个Serversocket在处理,如果多个客户端请求就会出现阻塞的情况了。
------解决方案--------------------
楼主服务器端ServerSocket应该一直监听,有客户端连接就new 新线程,关闭的是这个线程,而不是主线程中ServerSocket,给你例子。
package conn;
import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*对象反串行化,与客户端定义一样*/
class Customer extends Object implements java.io.Serializable //封装登录信息
{
String custName; //用户名
String custPassword; //密码
}
class ChaXun extends Object implements java.io.Serializable //封装查询信息
{
String neirong; // 用户ID或用户姓名
}
class Exit extends Object implements java.io.Serializable //封装退出信息