要學會Java網絡編程,首先要对網絡通讯知识有一定的初步的了解,如网络OSI七层模型,常用的網絡協議,如tcp/ip,Http,FTP等協議,讀者可以從網上獲取這些知識,來進一步的了解,有助于Java的網絡編程,在此就不講這些內容了.下我們主要看一下如何在Java中進行網絡編程.
我們現在來實現一個服務器和多個客戶端時行網絡通訊的功能.
1. 使用Eclipse IDE,首先創建一個java項目:MultiThreadSocket 并讓它繼承Thread類
package pa20110201;
import java.net.UnknownHostException;
/**
*
* @author Liyongbin
* @date 02-01-2011
*
*/
public class MultiThreadSocket extends Thread{
private Socket socket;
public MultiThreadSocket (Socket socket){
this.socket=socket;
}
}
2. 在這個類中創建兩個靜態方法: server 和 client,分別模擬服務器端和客戶端
/**
* 服務器端
*/
public static void server(){
try {
//創建服務器端的套接字(綁定到8000端口上)
ServerSocket ss = new ServerSocket(8000);
//我循環等待用戶請求
while (true) {
//返回一個套接字
Socket sk =ss.accept();
//創建一個線程
new MultiThreadSocket(sk).start();
}
//關閉服務器端套接字
//ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 客戶端
*/
static void client(){
try {
//直接返回IP
//Socket s1 = new Socket(InetAddress.getByName("127.0.0.1"),8000);
//輸出流
OutputStream os = s1.getOutputStream();
//輸入流
InputStream is = s1.getInputStream();
//定義字節數組
byte [] buffer =new byte[1000];
//從Buffer中讀取數據
int length = is.read(buffer);
//將讀取的數打印出來
System.out.println(new String (buffer,0,length));
//往服務器端發送數據
os.write("I'm zhangshan4!".getBytes());
//關閉輸出流
os.close();
//關閉輸入流
is.close();
//關閉套接字
s1.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3. 重寫Thread的run方法://運行線程 @Override
//運行線程
@Override
public void run() {
try {
//往客戶端發送數據
OutputStream os = socket.getOutputStream();
//從網絡上讀取數據
InputStream is = socket.getInputStream();
//發送Hello world
os.write("Hello world!".getBytes());
//定義字節數組
byte [] buffer =new byte[1000];
//從Buffer中讀取數據
int length = is.read(buffer);
//將讀取的數打印出來
System.out.println(new String (buffer,0,length));
//關閉輸出流
os.close();
//關閉輸入流
is.close();
//關閉套接字
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
4. 寫一個測方法
public static void main(String[] args) {
if (args.length >0) {
server();
}else{
client();
}
}
5. 項目中所要導入的包如下
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
6. 設置啟動項目的參數,如圖所示:
1). 選擇 Run Configurations, 新建兩個啟動項,一個是服務器(MultiThreadSocket _Server),
另一個是客戶端(MultiThreadSocket _Client)
2).在服務器的啟動項上沒置啟動參數(任意),客端啟動項則勿需設置啟動參數,如圖:
3).設置成功后如圖所示:
7. 設置控制臺的顯示:
8. 所有的設置均已完成,可以運行程序了,
首先運行服務器端,然後啟動客戶端,服務端只啟動一次,客戶端可啟動多次,運行結果如下: