建立简单的服务器端程序

  参考自core java


package com.lujinhong.corejava;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class EchoServer {

	public static void main(String[] args) {
		
		try {
			ServerSocket serverSocket = new ServerSocket(8019);
			Socket socket = serverSocket.accept();
			
			InputStream is = socket.getInputStream();
			OutputStream os = socket.getOutputStream();
			
			PrintWriter pw = new PrintWriter(os);
			Scanner sc = new Scanner(is);
			
			Boolean flag = false;
			String line = null;
			String exitString = "bye";
			
			while(!flag && sc.hasNextLine()){
				pw.println("Hello, type " + exitString + " to exit!");
				line = sc.nextLine();
				if(line.trim().equals(exitString)){
					flag = true;
				}else{
					pw.println("Hello, "+line);
				}
			}
			pw.close();
			sc.close();
			serverSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

使用线程实现多个客户端同时访问:

package com.lujinhong.corejava;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class MultiEchoServer {

	public static void main(String[] args) {
		try {
			ServerSocket serverSocket = new ServerSocket(8189);
			while (true) {
				Socket socket = serverSocket.accept();

				Runnable r = new ThreadedEchoHandler(socket);
				Thread thread = new Thread(r);
				thread.start();
			}

		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

class ThreadedEchoHandler implements Runnable {

	private Socket s = null;

	public ThreadedEchoHandler(Socket socket) {
		s = socket;
	}

	@Override
	public void run() {
		try {
			InputStream is = s.getInputStream();
			OutputStream os = s.getOutputStream();

			PrintWriter pw = new PrintWriter(os);
			Scanner sc = new Scanner(is);

			Boolean flag = false;
			String line = null;
			String exitString = "bye";

			while (!flag && sc.hasNextLine()) {
				pw.println("Hello, type " + exitString + " to exit!");
				line = sc.nextLine();
				if (line.trim().equals(exitString)) {
					flag = true;
				} else {
					pw.println("Hello, " + line);
				}
			}
			sc.close();
			pw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

In this program, we spawn a separate thread for each connection. This approach is not satisfactory for highperformance servers. You can achieve greater server throughput by using features of the java.nio package. See www.ibm.com/developerworks/java/library/j-javaio for more information.

你可能感兴趣的:(服务器)