中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java簡單實現UDP和TCP的示例

發布時間:2020-10-19 12:04:40 來源:腳本之家 閱讀:188 作者:cccc_hi 欄目:編程語言

TCP實現

TCP協議需要在雙方之間建立連接,通過輸入輸出流來進行數據的交換,建立需要通過三次握手,斷開需要四次揮手,保證了數據的完整性,但傳輸效率也會相應的降低。

Java簡單實現UDP和TCP的示例

簡單的TCP實現

//服務端
public class TcpServer {
 public static void main(String[] args) throws IOException {
  ServerSocket serverSocket = new ServerSocket(8886); // 建立服務端,ip為本機ip,端口為8886
  Socket accept = serverSocket.accept(); // 監聽客戶端的連接,一旦有客戶端連接,則會返回客戶端對應的accept
  
  InputStream in = accept.getInputStream(); //獲取到客戶端的輸出流
  byte b[] = new byte[1024];
  int len = in.read(b);
  System.out.println("接受到客戶端數據,返回數據"+new String(b,0,len)); 
  
  OutputStream out = accept.getOutputStream(); // 給客戶端發送消息
  out.write("服務端已經接受".getBytes());
  
  serverSocket.close();
 }
}

// 客戶端
public class TcpClient {
 public static void main(String[] args) throws IOException {
  Socket socket = new Socket("127.0.0.1", 8886); // 通過Socket來建立和服務端的連接
  OutputStream out = socket.getOutputStream(); // 獲取輸出流(客戶端輸出流即向服務端輸出信息)
  out.write("hello tcp Server".getBytes()); // 輸出信息
  
  InputStream in = socket.getInputStream(); // 接受服務端的消息
  byte b[] = new byte[1024];
  int len = in.read(b);
  System.out.println("接受到服務器消息 : "+new String(b,0,len)); // 輸出
  out.write("返回的的數據已經收到 ".getBytes()); // 向服務器返回消息
  socket.close();
 }
}

改進服務端,啟用多線程來接受客戶端的數據

// server
 public static void main(String[] args) throws IOException {
  ServerSocket serverSocket = new ServerSocket(8886); // 建立服務端,ip為本機ip,端口為8886
  int i=4;
  while(i>2){
   Socket accept = serverSocket.accept(); // 監聽客戶端的連接,一旦有客戶端連接,則會返回客戶端對應的accept
   
   ServerThread st = new ServerThread(accept); // 啟動線程
   Thread th = new Thread(st);
   th.start();
  }
  serverSocket.close();
 }

// thread

public class ServerThread implements Runnable {
 private Socket accept;
 public ServerThread(Socket s) {
  this.accept = s;
 }
 public void run(){
  InputStream in;
  try {
   in = accept.getInputStream();
   byte b[] = new byte[1024];
   int len = in.read(b);
   System.out.println("接受到客戶端數據,返回數據" + new String(b, 0, len));
   OutputStream out = accept.getOutputStream(); // 給客戶端發送消息
   out.write("服務端已經接受".getBytes());
  } catch (IOException e) {
   e.printStackTrace();
  } 
 }
}

傳遞圖片

// 服務端

public class Server {
 public static void main(String[] args) throws IOException {

  ServerSocket serverSocket = new ServerSocket(5555);
  Socket ss = serverSocket.accept();
  
  BufferedInputStream br = new BufferedInputStream(ss.getInputStream());

  BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("copy.jpg")); // 寫出文件流
  
  byte b[] = new byte[1024];
  int len = 0;
 
  while ((len = br.read(b)) != -1) { // 寫出文件
   bw.write(b, 0, len);
   bw.flush(); // 別忘了刷新,要不然最后一塊緩沖區字符串會缺失
  }

  BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(ss.getOutputStream())); // 輸出
  bw2.write("圖片傳輸成功");
  bw2.flush();
  
  bw.close();
  ss.close();
 }

}


// 客戶端

public class Client {
 public static void main(String[] args) throws UnknownHostException, IOException {
  Socket socket = new Socket("127.0.0.1", 5555);
  BufferedInputStream in = new BufferedInputStream(new FileInputStream("c.jpg"));

  BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());

  byte b[] = new byte[1024];
  int len = 0;

  while ((len = in.read(b)) != -1) {
   out.write(b, 0, len);
   out.flush(); // 刷新緩沖區 要不然最后一塊緩沖區字符串會缺失
  }
  
  socket.shutdownOutput(); // 關閉流以后Server段才會接收道結束字符結束接受

  BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  String line;
  while ((line = br.readLine()) != null) {
   System.out.println(line);
  }
  
  in.close();
  socket.close();

 }

}

UDP實現

UDP是將數據打成數據包向對方發送,只關系是否發送成功,而不關心是否接收成功,傳輸速度快,但是可靠性低。

udp代碼實現

// 發送端
public class SendDemo {
 public static void main(String[] args) throws IOException {
  DatagramSocket ds = new DatagramSocket(); // 此類表示用來發送和接收數據報包的套接字。
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 鍵盤輸入
  String line = null;
  while ((line = br.readLine()) != null) {
   byte[] bytes = line.getBytes();
   DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 10005); // 數據包對象
   ds.send(dp);
   if ("886".equals(line)) { // 當輸入886時結束發送
    break;
   }
  }
  ds.close();
 }

}


// 接收端

public class ReciveDemo {
 public static void main(String[] args) throws IOException {
  DatagramSocket ds = new DatagramSocket(10005); // 建立服務端
  byte bytes[] = new byte[1024];
  DatagramPacket dp = new DatagramPacket(bytes, bytes.length); // 建立數據包對象
  while (true) {
   ds.receive(dp); // 接受數據包
   byte[] data = dp.getData(); // 獲取數據
   String str = new String(data, 0, dp.getLength());
   if ("886".equals(str)) {
    break;
   }
   System.out.println(str);
  }
  ds.close();
 }
}

以上這篇Java簡單實現UDP和TCP的示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節
推薦閱讀:
  1. UDP-TCP
  2. TCP與UDP

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤峰县| 仙桃市| 昭觉县| 荔波县| 竹北市| 天镇县| 策勒县| 榕江县| 界首市| 突泉县| 延边| 海南省| 嘉义市| 舟山市| 桐城市| 静海县| 葫芦岛市| 西充县| 蓬安县| 额敏县| 石城县| 安阳市| 从江县| 奇台县| 汶川县| 温宿县| 安宁市| 张家界市| 康定县| 北流市| 义马市| 祁门县| 泽州县| 邮箱| 雅江县| 汉川市| 吉林省| 囊谦县| 宣恩县| 平泉县| 堆龙德庆县|