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();
}
}
}