Java代碼
import java.io.IOException; import java.net.InetAddress; import java.net.Socket; public class ServerSocket { public static void main(String[] args) { beginSocket(); } public static void beginSocket(){ try { java.net.ServerSocket serverSocket=new java.net.ServerSocket(3456); InetAddress inta=serverSocket.getInetAddress().getLocalHost(); System.out.println(inta.getHostAddress()); while(true){ Socket socket=serverSocket.accept(); new HelloMessage(socket); } } catch (IOException e) { e.printStackTrace(); } } }
import java.io.IOException;import java.net.InetAddress;import java.net.Socket;public class ServerSocket {public static void main(String[] args) {beginSocket();}public static void beginSocket(){try {java.net.ServerSocket serverSocket=new java.net.ServerSocket(3456);InetAddress inta=serverSocket.getInetAddress().getLocalHost();System.out.println(inta.getHostAddress());while(true){Socket socket=serverSocket.accept();new HelloMessage(socket);}} catch (IOException e) {e.printStackTrace();}}}
為了提高并發(fā)時的處理效率,對于每個請求,系統(tǒng)都新建一個線程處理。
Java代碼

import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class HelloMessage extends Thread { private Socket socket_ = null; public HelloMessage(Socket socket) { this.socket_ = socket; this.start(); } public void run() { try { BufferedReader bReader = new BufferedReader(new InputStreamReader( this.socket_.getInputStream())); PrintWriter pWriter = new PrintWriter(this.socket_ .getOutputStream()); String requestStr = bReader.readLine(); if (requestStr != null && !"".equals(requestStr)) { if (requestStr.equals("java")) { pWriter.println("your write is java"); } if (requestStr.equals(".net")) { pWriter.println("your write is .net"); } if (requestStr.equals("php")) { pWriter.println("your write is php"); } if (requestStr.equals("end")) { pWriter.println("your write is end"); }else{ pWriter.println("your write is other"); } }else{ pWriter.println("your write is null"); } pWriter.flush(); pWriter.close(); bReader.close(); this.socket_.close(); } catch (Exception e) { e.printStackTrace(); } } }
import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class HelloMessage extends Thread {private Socket socket_ = null;public HelloMessage(Socket socket) {this.socket_ = socket;this.start();}public void run() {try {BufferedReader bReader = new BufferedReader(new InputStreamReader(this.socket_.getInputStream()));PrintWriter pWriter = new PrintWriter(this.socket_.getOutputStream());String requestStr = bReader.readLine();if (requestStr != null && !"".equals(requestStr)) {if (requestStr.equals("java")) {pWriter.println("your write is java");}if (requestStr.equals(".net")) {pWriter.println("your write is .net");}if (requestStr.equals("php")) {pWriter.println("your write is php");}if (requestStr.equals("end")) {pWriter.println("your write is end");}else{pWriter.println("your write is other");}}else{pWriter.println("your write is null");}pWriter.flush();pWriter.close();bReader.close();this.socket_.close();} catch (Exception e) {e.printStackTrace();}}}
然后是客戶端的代碼。
Java代碼

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 ClientSocket { public static void main(String[] args) { clientRequest(); } private static void clientRequest() { try { while (true) { Socket clientSocket = new Socket("172.168.4.105", 3456); BufferedReader bReader = new BufferedReader(new InputStreamReader( System.in)); System.out.println("please input java or .net or php or end"); String strLine = bReader.readLine(); if (strLine != null && !"".equals(strLine)) { PrintWriter pWriter = new PrintWriter(clientSocket .getOutputStream(), true); pWriter.println(strLine); BufferedReader br = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); String strResult = br.readLine(); System.out.println(strResult); pWriter.flush(); pWriter.close(); clientSocket.close(); } } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
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 ClientSocket {public static void main(String[] args) {clientRequest();}private static void clientRequest() {try {while (true) {Socket clientSocket = new Socket("172.168.4.105", 3456);BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));System.out.println("please input java or .net or php or end");String strLine = bReader.readLine();if (strLine != null && !"".equals(strLine)) {PrintWriter pWriter = new PrintWriter(clientSocket.getOutputStream(), true);pWriter.println(strLine);BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String strResult = br.readLine();System.out.println(strResult);pWriter.flush();pWriter.close();clientSocket.close();}}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
這樣一個簡單的TCP,Socket編程的原型就成了。簡單介紹下:
幾個比較重要的API
.Accept方法用于產(chǎn)生"阻塞",直到接受到一個連接,并且返回一個客戶端的Socket對象實例。
.getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時返回一個IutputStream對象實例,。
.getOutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。