和客户端程序不同,服务器端使用的是ServerSocket,构造函数如下
ServerSocket server = new ServerSocket(80);
上面的代码表示服务器端在监听80端口
根据前一篇的客户端代码,贴上服务端的代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TalkServer{
/** 服务器端口,侦听端口 */
private static final int SERVER_PORT = 4700;
public static void main(String args[]) {
try {
ServerSocket server=null;
try{
server=new ServerSocket(SERVER_PORT);
} catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
// 使用accept()阻塞等待客户请求
socket=server.accept();
} catch(Exception e) {
System.out.println("Error."+e);
}
String line;
// 由Socket对象得到输入流,并构造相应的BufferedReader对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
// 由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
// 由键盘(系统默认输入设备)设备构造BufferedReader对象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
// 在显示器(标准输出)上打印从客户端读入的字符串
System.out.println("Client:"+is.readLine());
// 从标准输入读入一字符串
line=sin.readLine();
while (!line.equalsIgnoreCase("bye")) {
// 向客户端输出该字符串
os.println(line);
// 刷新输出流,使Client马上收到该字符串
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
server.close(); //关闭ServerSocket
} catch(Exception e) {
e.printStackTrace();
}
}
}