1.建立EchoServer服务器,监听来自客户的连接
EchoServer.java:
package chapter01;
import java.io.*;
import java.net.*;
public class EchoServer {
private int port = 8000; //服务器端口号(IP默认为本地主机IP)
private ServerSocket serverSocket; //ServerSocket
public EchoServer() throws IOException{
serverSocket = new ServerSocket(port);
System.out.println("服务器启动");
}
public String echo(String msg){
return "echo" + msg;
}
/*
*分别用PrintWriter和BufferedReader 修饰socket中的输入输出流
*/
private PrintWriter getWriter(Socket socket) throws IOException{
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private BufferedReader getReader(Socket socket) throws IOException{
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void service(){
while(true){ //循环监听
Socket socket = null;
try{
socket = serverSocket.accept(); //等待一个连接
System.out.println("New connection accepted"+socket.getInetAddress()+":"+socket.getPort());
BufferedReader br = getReader(socket); //从客户端读信息的流
PrintWriter pw = getWriter(socket); //向客户端写信息的流
String msg = null;
while((msg=br.readLine())!=null){
System.out.println(msg);
pw.println(echo(msg));
if(msg.equals("bye")){
break;
}
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(socket!=null){
socket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
public static void main(String argsp[]) throws IOException{
new EchoServer().service();
}
}
2.EchoClient向服务器发出连接
EchoClient.java:
package chapter01;
import java.net.*;
import java.io.*;
public class EchoClient {
private String host = "127.0.0.1"; //指定要连接的服务器IP地址
private int port = 8000; //指定要连接的服务器端口号
private Socket socket;
public EchoClient() throws IOException{
socket = new Socket(host,port);
}
public static void main(String[] args) throws IOException {
new EchoClient().talk();
}
/*
*分别用PrintWriter和BufferedReader 修饰socket中的输入输出流
*/
private PrintWriter getWriter(Socket socket) throws IOException{
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private BufferedReader getReader(Socket socket) throws IOException{
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void talk() throws IOException{
try{
BufferedReader br = getReader(socket); //从服务器读信息的流
PrintWriter pw = getWriter(socket); //向服务器写信息的流
BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in)); //从本地控制台读取输入的流
String msg =null;
while((msg=localReader.readLine())!=null){
pw.println(msg);
System.out.println(br.readLine());
if(msg.equals("bye")){
break;
}
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
socket.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}