這是一個比較簡單的例子來說明socket編程,服務器端使用了多線程來監聽客戶端。
服務器端的代碼:
package SocketTest;
import java.io.*;
import java.net.*;
import java.util.*;
class SocketServer{
public SocketServer(){
Socket incoming;
ServerSocket so;
try{
so= new ServerSocket(8001);
System.out.println("等待客戶端連接。");
while(true){
try{
incoming =
so.accept( );
System.out.println("已連接客戶端。");
GetInfo gi=new
GetInfo(incoming);//調用線程
} catch (IOException e){
e.printStackTrace();
}
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
new SocketServer();
}
private static class GetInfo implements Runnable{ //線程類
private Socket incoming;
private String s=null;
private BufferedReader b;
Thread t;
public GetInfo(Socket incoming){
try{
this.incoming=incoming;
b=new BufferedReader(new
InputStreamReader(incoming.getInputStream()));
t=new Thread(this);
t.start();
}catch(IOException e){
e.printStackTrace();
}
}
public void run(){
try{
while (true){
s=b.readLine();
System.out.println(s);
if(s.equals("end")){
break;
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
}
客戶端的代碼:
package SocketTest;
import java.io.*;
import java.net.*;
import java.util.*;
public class SocketClient{
public static void main(String[] args){
try{
Socket so = new Socket("localhost", 8001);
System.out.println("連接服務器。");
BufferedReader b=new BufferedReader(new
InputStreamReader(System.in));
OutputStream outStream = so.getOutputStream();
PrintWriter out = new PrintWriter(outStream);
String s=null;
while (true){
s=b.readLine();
out.println("Client:"+s);
out.flush();
if(s.equals("end")){
break;
}
}
}catch (IOException e){
e.printStackTrace();
}
}
}
posted on 2005-10-10 14:04
千山鳥飛絕 閱讀(2692)
評論(2) 編輯 收藏 所屬分類:
J2SE