Java網路通訊套接字
(一)第一個例子是簡單的Socket通訊,一個客戶端和一個伺服器執行緒:
/**
* SimpleClient.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SimpleClient {
public static void main(String[] args) {
Socket socket = null;
BufferedReader reader = null;
PrintWriter writer = null;
try {
//請求建立通訊套接字
socket = new Socket("localhost",8089);
//獲取輸入輸出流
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true); //true means autoFlush
//while(true){
writer.println("hello, I am Client\n");
String mess = reader.readLine();
System.out.print("Client Receive:"+mess);
//}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(socket != null) socket.close();
if(reader != null) reader.close();
} catch (IOException e) {
e.printStackTrace();
}
if(writer != null) writer.close();
}
}
}
/**
* SimpleServer.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) {
ServerSocket ss = null; //用於接收請求的Socket
Socket socket = null; //用於通訊的Socket
BufferedReader reader = null;
PrintWriter writer = null;
try {
ss = new ServerSocket(8089);
System.out.print("waiting for new request...\n");
socket = ss.accept(); //等待請求,建立通訊Socket
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
String mess = reader.readLine();
System.out.print("Server Receive:"+mess);
writer.println("Yes, I can hear you");
} catch (IOException e) {
e.printStackTrace();
}
}
}
(二)第二個列子是在伺服器端,採用多執行緒方式處理來自客戶端的請求:
/**
* TCPClient.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPClient {
private static int id = 0;
public static void main(String[] args) {
String host = "localhost";
int port = 8060;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try {
//建立五個請求伺服器連線的客戶端
for(int i=0;i<5;i++){
//建立通訊套接字
socket = new Socket(host, port);
//獲取套接字的輸入輸出流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
//向伺服器傳送訊息
out.println("hello, i am client "+(++id));
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.print("Closing Socket...\n");
try {
if(socket != null) socket.close();
if(in != null) in.close();
} catch (IOException e) {
e.printStackTrace();
}
if(out != null) out.close();
}
}
}
/**
* TCPServer.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
int port = 8060;
Socket socket = null;
ServerSocket server = null;
try {
//建立伺服器套接字
server = new ServerSocket(port);
while(true){
//接收來自客戶端的請求,建立通訊套接字
System.out.print("waiting for new request...\n");
socket = server.accept();
//建立一個執行緒處理該請求
Thread t = new Thread(new ServerThread(socket));
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(server != null) server.close();
if(socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 處理來自客戶端請求的執行緒
* */
class ServerThread implements Runnable{
private Socket socket;
public ServerThread(Socket s){
this.socket = s;
}
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
//獲取套接字的輸入輸出流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
//讀取客戶端傳送來的訊息
String s = in.readLine();
System.out.println("recv:"+s);
//out.write("accept");
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.print("Closing Connection...\n");
try {
if(socket != null) socket.close();
if(in != null) in.close();
} catch (IOException e) {
e.printStackTrace();
}
if(out != null) out.close();
}
}
}
相關文章
- Unix 套接字程序通訊初探【Java 版本】Java
- 網路套接字
- python UDP套接字通訊PythonUDP
- Unix 套接字程序通訊初探【Go 版本】Go
- Linux 下的程式間通訊:套接字和訊號Linux
- 計算機網路之十一:套接字Socket計算機網路
- 套接字為什麼叫套接字?
- 《UNIX網路程式設計》筆記 - 套接字選項/UDP套接字程式設計筆記UDP
- 網路通訊
- udp網路通訊UDP
- IPC之套接字
- 網路通訊3:TCP互動通訊TCP
- 網路通訊2:TCP簡單通訊TCP
- 網路通訊2:TCP通訊實現TCP
- 19作 網路通訊
- dubbo網路通訊(四)
- 網路通訊1:UDPUDP
- 網路通訊基礎
- 網路通訊協議協議
- 網路通訊程式設計程式設計
- docker系列(五):網路通訊Docker
- Python 套接字內建方法Python
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- WebRTC---網路實時通訊Web
- 網路通訊4:TCP廣播TCP
- 網路通訊技術基礎
- 快速理解網路通訊協議協議
- Calico 網路通訊原理揭祕
- 網路通訊單元NU系列
- 01啟動(關閉)套接字
- 網路-淺談批次通訊和自主通訊的區別
- Java入門系列-25-NIO(實現非阻塞網路通訊)Java
- 一個簡單混合協議通訊列子,物聯網和網際網路通訊。協議
- 使用UDP如何進行網路通訊UDP
- 網路和通訊安全有哪些要求?
- 網路通訊5:HTTP下載器HTTP
- Kubernetes的容器網路通訊機制
- Java進階:基於TCP通訊的網路實時聊天室JavaTCP
- 基本TCP套接字程式設計APITCP程式設計API