larryscale 发表于 2013-1-15 02:10:19

Java中用多线程实现网络编程

要學會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;//從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
//運行線程@Overridepublic void run() {try {//往客戶端發送數據OutputStream os = socket.getOutputStream();//從網絡上讀取數據InputStream is = socket.getInputStream();//發送Hello worldos.write("Hello world!".getBytes());//定義字節數組byte [] buffer =new byte;//從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)
 
http://dl.iteye.com/upload/attachment/407582/9b8fcd5f-fed6-3f49-b062-8d5e66e40613.jpg
 
 
   2).在服務器的啟動項上沒置啟動參數(任意),客端啟動項則勿需設置啟動參數,如圖:
 
http://dl.iteye.com/upload/attachment/407584/9450cdd3-c4d4-310d-ba3c-0107f7b85279.jpg
 
3).設置成功后如圖所示:
 
http://dl.iteye.com/upload/attachment/407586/9cf52229-5ca9-3d30-89ac-185322a9b451.jpg
 
7.  設置控制臺的顯示:
 
http://dl.iteye.com/upload/attachment/407590/8272bc02-0b6b-3350-aa9d-1141cad77d4e.jpg
 
8. 所有的設置均已完成,可以運行程序了,
    首先運行服務器端,然後啟動客戶端,服務端只啟動一次,客戶端可啟動多次,運行結果如下:
http://dl.iteye.com/upload/attachment/407592/a681587b-45fa-34dd-8583-417c6243bd04.jpg
 
 
 
 
 
 
 
页: [1]
查看完整版本: Java中用多线程实现网络编程