我是蒙古人--網絡編程
阿新 • • 發佈:2017-05-16
public != ack log 5.1 byte nts todo 類型
1,java的服務器通過serverSocket建立TCP服務器,利用 Socket 建立TCP 客戶端。
2,cmd 調出 dos 命令窗口 ,輸入ipconfig /all 來查看機器上所有ip 地址
3,創建(服務器)和(客戶端)的代碼如下:
package cn.day1; /* *服務器 * */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server{ public static void main(String[] args) throws IOException { //創建監聽socked ServerSocket server=new ServerSocket(50000); System.out.println("服務端"); //創建通訊socket Socket socket = server.accept(); //用輸入流接收客戶端請求 getInputStream stream= socket.getInputStream(); int date; byte[] by=new byte[1024]; while((date=stream.read(by))!=-1){ String temp=new String(by,0,date); System.out.println(temp); } stream.close(); } }
package cn.day1; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; /* * 客戶端 */ public class sock { public static void main(String[] args) throws UnknownHostException, IOException { Socket so=new Socket("192.168.15.117",50000); //用輸出流輸出客戶端請求 OutputStream stream = so.getOutputStream(); String name="娜娜"; stream.write(name.getBytes()); stream.close(); } }
4,要想多個客戶端給一個服務器發信息,那麽我們用到(線程)以及(死循環)。
代碼如下:
package cn.day1; /* * 建立線程 */ import java.io.IOException; import java.io.InputStream; import java.net.Socket; public class Tread extends Thread{ Socket socket=null; @Override public void run() { while(true){ InputStream stream = null; try { stream = socket.getInputStream(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] bytes=new byte[1024]; int dex; try { while((dex=stream.read(bytes))!=-1){ //數據在二進制數組裏頭,轉換成字符串類型 String temp=new String(bytes,0,dex); System.out.println(temp); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } package cn.day1; /* * 使用無限循環接收 多個客戶端 請求 */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class X { public static void main(String[] args) throws IOException { //z創建監聽socked ServerSocket server=new ServerSocket(50000); System.out.println("服務端"); //創建通訊socket while(true){ Socket socket = server.accept(); Tread t1=new Tread(); t1.socket=socket; t1.start(); } } }
5,服務器接收客戶端請求以後反饋給客戶端的代碼如下:
package cn.day1; /* *服務器 * */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //創建監聽socked ServerSocket server=new ServerSocket(50000); System.out.println("服務端"); //創建通訊socket Socket socket = server.accept(); //用輸入流接收客戶端請求 InputStream stream= socket.getInputStream(); int date; byte[] by=new byte[1024]; while((date=stream.read(by))!=-1){ String temp=new String(by,0,date); System.out.println(temp); } socket.shutdownInput(); //服務器給客戶端一個相應 //打開輸出流,發送數據 OutputStream os = socket.getOutputStream(); String name="我是服務器,客戶端登錄成功"; os.write(name.getBytes()); os.close(); stream.close(); } } package cn.day1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; /* * 客戶端 */ public class Socket { public static void main(String[] args) throws UnknownHostException, IOException { Socket so=new Socket("192.168.15.117",50000); //用輸出流輸出客戶端請求 OutputStream stream = so.getOutputStream(); String name="娜娜"; stream.write(name.getBytes()); so.shutdownOutput(); //服務器接收客戶端反饋 InputStream is = so.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); name=""; while((name=br.readLine())!=null){ System.out.println(name); } is.close(); stream.close(); } }
註意:用完一次服務器或客戶端我們該關閉它們。
列如:
so.shutdownOutput();
我是蒙古人--網絡編程