简单Echo服务器
package zhc.Net;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class EchoServer {
public static void main(String[] args) {
try {
ServerSocket s = new ServerSocket(8189);
InetAddress localHostAddress = InetAddress.getLocalHost();
System.out.println(localHostAddress);
Socket incoming = s.accept();
try {
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true);
out.println("Hello! Enter BYE to exit.");
boolean done = false;
while (!done && in.hasNextLine()) {
String line = in.nextLine();
out.println("Echo " + line);
if (line.trim().equals("BYE"))
done = true;
}
}finally {
incoming.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
多线程 Echo服务器
package zhc.Net;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer2 {
public static void main(String[] args) {
try {
int i = 1;
ServerSocket s = new ServerSocket(8189);
while(true) {
Socket incoming = s.accept();
System.out.println("Spawning" + i);
Runnable r = new ThreadEchoHandler(incoming);
Thread t = new Thread(r);
t.start();
i++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package zhc.Net;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ThreadEchoHandler implements Runnable{
public ThreadEchoHandler(Socket i) {
incoming = i;
}
@Override
public void run() {
try {
try {
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true);
out.println("Hello! Enter BYE to exit.");
boolean done = false;
while (!done && in.hasNextLine()) {
String line = in.nextLine();
out.println("Echo " + line);
if (line.trim().equals("BYE"))
done = true;
}
} finally {
incoming.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
private Socket incoming;
}