連接建立過程:Server端服務(wù)器監(jiān)聽端口的連接請求,Client端向Server服務(wù)端發(fā)出連接請求,Server服務(wù)端調(diào)用accep()函數(shù)發(fā)回接受請求消息。
步驟有:
1.創(chuàng)建Socket對象;
2.打開輸入輸出流,用于接收網(wǎng)絡(luò)端口的消息;
3.進(jìn)行讀寫操作;
-
客戶端Client的程序?qū)崿F(xiàn):
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;public class Client { public static final int port = 3001; public static void main(String[] args) { try { Socket s = new Socket("192.168.0.102", port); \\try catch用來在連接建立不成功時產(chǎn)生異常; \\192.168.0.102為服務(wù)器ip地址;端口號port從0到1023為系統(tǒng)保留,因此最好用1023以上的 System.out.println("服務(wù)連接成功........."); \\若連接過久,重新運行程序時會運行出錯。 BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); \\getInputStream()只接收字節(jié),而InputStreamReader()使之變?yōu)樽址?,BufferedReaderI()使之變?yōu)樽址? BufferedWriter output = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); Scanner scan = new Scanner(System.in); String clientMsg; String serverMsg; clientMsg = scan.nextLine(); while (!clientMsg.startsWith("bye") ) { output.write("client say" + clientMsg + "\r\n"); \\ 這里的\r\n為換行符,因為readLine()要讀到換行符才產(chǎn)生作用。 output.flush(); serverMsg=input.readLine(); System.out.println(serverMsg); clientMsg = scan.nextLine(); } s.close(); scan.close(); input.close(); output.close(); } catch (IOException e) { e.printStackTrace(); } } } -
服務(wù)端程序?qū)崿F(xiàn):
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class Server { public static final int port=3002; public static void main(String[] args) { try { ServerSocket s = new ServerSocket(port); System.out.println("服務(wù)器已啟動........."); Socket socket; socket = s.accept(); System.out.println("已建立連接"); BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String serverMsg; String clientMsg; Scanner scan = new Scanner(System.in); clientMsg = input.readLine(); while(!clientMsg.startsWith("bye")){ System.out.println(clientMsg); serverMsg = scan.nextLine(); output.write("server say"+serverMsg+"\r\n"); output.flush(); clientMsg = input.readLine(); } System.out.println("關(guān)閉連接...."); s.close(); scan.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }這是單個端口的socket編程,而若要進(jìn)行多個客戶端的socket編程則要用到多線程的知識,在此不贅述。
要問我代碼為什么寫得這么屌?戳下面的鏈接你就知道,想成為碼王一樣的男人嗎?我的代碼都放在那了,想要嗎?還等什么?趕快去拿吧??!