java socket類實現網絡通信

java socket 類分爲:ServerSocket、Socket,即服務器端和客戶端。這兩個類都屬於,java.net包中。

ServerSocket的用法:

1、首先創建ServerSocket對象,並綁定一個端口號(端口號取值範圍0-65535,0-1023是系統保留端口,建議設置1023之後的,大點更好,注意不能使用已經佔用的端口)。

2、通過ServerSocket的accept()方法偵聽綁定的端口,此方法會返回一個Socket對象

3、接下來通過Socket對象獲取OutputStream、InputStream輸出輸入流。

4、使用輸入輸出流讀取或返回數據到客戶端,分別使用流的read()、write()方法讀取和輸出,注意字符串必須轉換爲byte數組輸出,讀取類似。

5、詳細使用請參考,java API

Socket使用示例:

實現了,服務器端和客戶端的連接,可在兩臺電腦測試,一臺也可以。注意是兩個進程,首相啓動服務器,再啓動客戶端。測試請在命令提示符中,分別打開兩個命令提示符,一個運行服務器,另一個啓動客戶端。本例子實現的客戶端輸入一段字符串,服務器反轉順序後,返回到客戶端。

代碼如下:

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Test10 {

	public static void main(String[] args) {
		if(args.length>0){   //通過判斷main方法的參數分別啓動不同的進程
			Test10.server();   //有參數啓動服務器
		}else{
			Test10.client();   //無參數啓動客戶端
		}
	}
	
	public static void server() {   //服務器端進程
		try {
			ServerSocket server = new ServerSocket(6669);  //端口綁定爲6669
			Socket socket = server.accept();   //偵測端口
			OutputStream os = socket.getOutputStream();  //通過socket的方法獲取輸入輸出流
			InputStream is = socket.getInputStream();
			byte[] buf = new byte[100];
			int len = is.read(buf);    //讀取客戶端到byte數組
			String str=new String(buf, 0, len);
			char[] temp=str.toCharArray();  //字符串轉化爲char數組
			str="";
			for(int i=0;i<temp.length;i++){  //反轉字符串
				str+=temp[temp.length-1-i];
			}
			os.write(str.getBytes());  //輸出到客戶端
			os.close();
			is.close();
			socket.close();
			server.close();
		} catch (Exception e) {
			e.getMessage();
		}
	}

	public static void client() {  //客戶端進程
		try {
			Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 6669);
			OutputStream os = socket.getOutputStream();
			InputStream is = socket.getInputStream();
			Scanner sc=new Scanner(System.in);     //生成scanner標準輸入對象
			byte[] buf=new byte[100];
			System.out.print("請輸入(回車確認):");
			os.write(sc.nextLine().getBytes());
			int len=is.read(buf);
			System.out.print("服務器返回:");
			System.out.println(new String(buf,0,len));
			is.close();
			os.close();
			socket.close();
		} catch (Exception e) {
			e.getMessage();
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章