/** * <p>Title:EchoServer.java </p> * <p>Description: EchoServer create a echo-like server at port 3333</p> * @author Mac * @version 2002/9/2 */
import java.net.*; import java.io.*;
public class EchoServer { public static void main (String[] args) throws IOException { ServerSocket echoServer = null; try { echoServer = new ServerSocket(3333); //creat a server socket at port 3333(問題一) } catch(IOException e) { System.err. System.exit(-1); }
PrintWriter out = new PrintWriter(echoClient.getOutputStream(),true); //gets the socket's output stream and opens a PrintWriter on it //if you remove the argument true,what will happen?(問題三) BufferedReader in = new BufferedReader( new InputStreamReader(echoClient.getInputStream())); //gets the socket's input stream and opens a BufferedReader on it String strFromClient;
(客戶端) /** *<p>Title:EchoClient.java </p> *<p>Description: EchoClient creates a socket thereby getting a connection to echo-like server</p> * @author Mac Wang * @version 2002/8/30 */
import java.net.*; import java.io.*;
public class EchoClient {
public static void main(String[] args) { try { Socket echoClient = new Socket("yourhostname",3333); //creat a new socket connected to host and port 3333 PrintWriter out = new PrintWriter(echoClient.getOutputStream(),true);
BufferedReader in = new BufferedReader( new InputStreamReader(echoClient.getInputStream())); String fromServer,fromUser; BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in)); //gets the system input stream and opens a BufferedReader on it while ((fromUser = stdIn.readLine()) != null) { if (fromUser.equals("bye")) break; //when user types "bye" then end
4、注重程序中是如何讀取和寫入Socket的? 5、試著多打開幾個客戶端,看看效果如何? 從問題5中大家可以看出來,上面的例子只支持一個用戶連接,那么如何支持多用戶的同時訪問呢?最簡單有效的方法就是利用多線程實現,每個線程對應一個用戶連接,server接受一個client連接后,就新產生一個線程,并交由它去處理余下的工作。下面就是支持多用戶的服務器端實現: /** *<p>Title:EchoMultiServer </p> *<p>Description: EchoServer create a echo-like server at port 3333 which supports multi-client</p> * @author Mac Wang * @version 2002/9/2 */ import java.net.*; import java.io.*; class EchoMultiServerThread extends Thread { private Socket echoClient = nul