java socket通信
socket通信是指兩臺計算機的兩個程序之間的通信,雙向鏈路的每一端都稱為一個socket,但分為客戶機和服務器。
java.net提供了ServerSocket和Socket類,分別用于服務器和客戶端。
通信過程:
建立Socket連接,客戶端程序申請連接,服務器端程序監聽所有端口,判斷是否有客戶端的服務器請求,當客戶端申請某個端口連接時,服務器將對方的ip和端口號綁定形成套接字,這樣服務器和客戶機就建立了一個專用虛擬連接,可以相互通信了,通信結束后將虛擬連接拆除。
編程步驟:服務器先建立一個服務器套接字ServerSocket,并指定端口號監聽客戶機請求,然后建立一個Socket用來和客戶機通信,客戶機建立端建立同一端口的Socket以便和服務器通信。
?
java.net包含以上兩個類:
主要方法說明:
ServerSocket(int port)在指定端口上創建服務器Socket對象
ServerSocket(int port,int count)count 為最大連接數
Sorket(InetAddress IP,int port)使用指定IP和端口建立Socket對象
Sorket(String host,int port)使用指定主機和端口建立Socket對象
以上兩個方法有對三個選項 boolean stream(布爾值表示是否選用流式通信)
可以用Socket類的 getInputstream 和getOutstream來讀寫數據的輸入輸出流。但要進行異常處理,讀取輸入輸出流后要建立更容易操作的InputStreamReader和Out..... 通信結束后close(Socket)斷開連接。
?
Socket應用:
?
服務器:
package Socket;
import java.io.*;
import java.net.*;
public class Serverclass{?
public static final int SERVERPORT = 9999; //服務器端口號
public static void main(String[] args ){?
try{?
ServerSocket s = new ServerSocket(SERVERPORT);?
System.out.println("開始:" + s); //建立服務器端監聽套接字
Socket incoming = s.accept( );//等待并接收請求,建立連接套接字
System.out.println("連接并接收到:" + incoming);//收到連接請求,incoming為套接字端口
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
//新建網絡連接輸入流,讀取incoming端口傳來的信息,為一個對象,傳入數據的格式,通過in.readline()翻譯
PrintWriter out = new PrintWriter( new BufferedWriter(new OutputStreamWriter(incoming.getOutputStream())), true);
//新建自動刷新的網絡輸出流,作用:通過out.println()向客戶端輸出信息。
System.out.println( "輸入quit退出" );?
while (true){?
String line = in.readLine(); //按行讀取socket輸入
if (line == null) break;
else{?
if (line.trim().equals("quit")){
System.out.println("客戶端輸入了quit!");
System.out.println("連接已經關閉!");
break; }
System.out.println("客戶端輸入的是:" + line);
out.println("您輸入的是:" + line);}}?
incoming.close();}
catch (IOException e){ //異常處理?
System.err.println("輸入輸出異常"+e.getMessage());}
}
}
?
?
?
客戶端:
package S;
import java.io.*;
import java.net.*;
public class server {
public static final int PORT=9999;
public static void main(String args[]){
try{
Socket s=new Socket("localhost",PORT);//建立連接套接字
System.out.println("socket"+s);//輸出端口信息
//新建網絡連接輸入流
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
//自動刷新的網絡連接輸出流
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(
s.getOutputStream())),true);
//構造stdin
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("輸入一個字符串,quit退出");
while(true){
//先對如系統輸入,在通過套接字輸出,out為PrintWriter對象
out.println(stdin.readLine());//out的參數為BufferedWriter類,stdin。readline()
String str=in.readLine();
if(str==null)
break;
System.out.println(str);
}
s.close();
}
catch(IOException e){
System.err.println("錯誤:"+e.getMessage() );
}
}
}
?
轉載于:https://www.cnblogs.com/hitxx/p/4849592.html
總結
以上是生活随笔為你收集整理的java socket通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中使用Jedis操作Redis
- 下一篇: Linux程序包管理