代碼例子下載:http://pan.baidu.com/s/1jGuSdyY
先來個簡單的例子:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class EchoPlayer {public String echo(String msg) {return "echo:" + msg ;}public void talk() throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String msg = null;while ((msg = br.readLine()) != null) {System.out.println(echo(msg));if (msg.equals("bye")) break;}}public static void main(String arg[]) throws IOException{new EchoPlayer().talk();}}
下面代碼是一個伺服器例子:用戶端向伺服器發生訊息,伺服器收到訊息後向用戶端發生一條同樣的訊息。
EchoServer
import java.awt.Stroke;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class EchoServer {private int port = 8000;private ServerSocket serverSocket;public EchoServer ()throws IOException {serverSocket = new ServerSocket(port);System.out.println("server Start");}public String echo(String msg) {return "echo:" + msg;}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) {// TODO: handle exceptione.printStackTrace();}finally{try {if (socket != null) {socket.close();}} catch (IOException e2) {// TODO: handle exceptione2.printStackTrace();}}}}public static void main(String args[]) throws IOException {new EchoServer().service();}}
在EchoServer程式的service()方法中,每當 serverSocket.accept();方法返回一個Socket對象,就表示建立了與一個客戶的連結,這個Socket對象中包含了客戶的地址和連接埠資訊,只需要調用Socket對象的socket.getInetAddress() 和socket.getPort()方法就能分別獲得這些資訊。
相關基礎知識:
1、Java網路程式位於TCP/IP參考模型的 網路互聯層
2、TCP協議和IP 協議位於傳輸層。
3、假定一個進程已經佔用TCP的80連接埠,它還能否佔用UDP的80連接埠。 不可以
4、一個客戶進程執行以下代碼;
Socket socket1 = new Socket(host,port);
Socket socket2 = new Socket(host,port);
下面說法正確:
A、socket1和socket2佔用不同的本地連接埠
B、當Socket構造方法成功返回時,就表明建立了與伺服器的一個TCP連結
5、有一種協議規定,如果用戶端發送一行字串"date",伺服器端就返回當前日期資訊:如果用戶端發送一行字串"exit",伺服器端就結束與用戶端的通訊。這種協議應該和哪一層的協議。
答:應用程式層
6、HTTP協議規定預設情況下,HTTP伺服器佔用的TCP連接埠號碼是什麼。 80
7、在客戶/伺服器通訊模式中,客戶程式與伺服器程式的主要任務是什麼?
A、客戶程式發送請求,並接收伺服器的響應
B、伺服器程式接收並處理客戶請求,然後向客戶發送響應結果
8、從哪裡可以找到描述TCP/IP協議的具體文檔。 RFC的官方網站
9、一個伺服器處理序執行以下代碼:
ServerSocket serverSocket = new ServerSocket(80);
Socket socket = serverSocket.accept();
int port = socket.getPot();
A、伺服器處理序佔用80連接埠
B、當serverSocket.accept()方法成功返回時,就表明伺服器處理序接收到了一個客戶串連請求
C、socket.getPort()方法返回用戶端通訊端佔用的本地連接埠