最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java簡(jiǎn)單實(shí)現(xiàn)UDP和TCP的示例

 更新時(shí)間:2017年11月07日 08:42:48   作者:cccc_hi  
下面小編就為大家?guī)?lái)一篇Java簡(jiǎn)單實(shí)現(xiàn)UDP和TCP的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

TCP實(shí)現(xiàn)

TCP協(xié)議需要在雙方之間建立連接,通過(guò)輸入輸出流來(lái)進(jìn)行數(shù)據(jù)的交換,建立需要通過(guò)三次握手,斷開(kāi)需要四次揮手,保證了數(shù)據(jù)的完整性,但傳輸效率也會(huì)相應(yīng)的降低。

簡(jiǎn)單的TCP實(shí)現(xiàn)

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

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

改進(jìn)服務(wù)端,啟用多線程來(lái)接受客戶端的數(shù)據(jù)

// server
 public static void main(String[] args) throws IOException {
  ServerSocket serverSocket = new ServerSocket(8886); // 建立服務(wù)端,ip為本機(jī)ip,端口為8886
  int i=4;
  while(i>2){
   Socket accept = serverSocket.accept(); // 監(jiān)聽(tīng)客戶端的連接,一旦有客戶端連接,則會(huì)返回客戶端對(duì)應(yīng)的accept
   
   ServerThread st = new ServerThread(accept); // 啟動(dòng)線程
   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("接受到客戶端數(shù)據(jù),返回?cái)?shù)據(jù)" + new String(b, 0, len));
   OutputStream out = accept.getOutputStream(); // 給客戶端發(fā)送消息
   out.write("服務(wù)端已經(jīng)接受".getBytes());
  } catch (IOException e) {
   e.printStackTrace();
  } 
 }
}

傳遞圖片

// 服務(wù)端

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(); // 別忘了刷新,要不然最后一塊緩沖區(qū)字符串會(huì)缺失
  }

  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(); // 刷新緩沖區(qū) 要不然最后一塊緩沖區(qū)字符串會(huì)缺失
  }
  
  socket.shutdownOutput(); // 關(guān)閉流以后Server段才會(huì)接收道結(jié)束字符結(jié)束接受

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

 }

}

UDP實(shí)現(xiàn)

UDP是將數(shù)據(jù)打成數(shù)據(jù)包向?qū)Ψ桨l(fā)送,只關(guān)系是否發(fā)送成功,而不關(guān)心是否接收成功,傳輸速度快,但是可靠性低。

udp代碼實(shí)現(xiàn)

// 發(fā)送端
public class SendDemo {
 public static void main(String[] args) throws IOException {
  DatagramSocket ds = new DatagramSocket(); // 此類表示用來(lái)發(fā)送和接收數(shù)據(jù)報(bào)包的套接字。
  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); // 數(shù)據(jù)包對(duì)象
   ds.send(dp);
   if ("886".equals(line)) { // 當(dāng)輸入886時(shí)結(jié)束發(fā)送
    break;
   }
  }
  ds.close();
 }

}


// 接收端

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

以上這篇Java簡(jiǎn)單實(shí)現(xiàn)UDP和TCP的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java多線程之線程,進(jìn)程和Synchronized概念初解

    java多線程之線程,進(jìn)程和Synchronized概念初解

    這篇文章主要介紹了java多線程之線程,進(jìn)程和Synchronized概念初解,涉及進(jìn)程與線程的簡(jiǎn)單概念,實(shí)現(xiàn)多線程的方式,線程安全問(wèn)題,synchronized修飾符等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Spring與Redis集成的正確方式流程詳解

    Spring與Redis集成的正確方式流程詳解

    這篇文章主要為大家介紹了Spring與Redis集成的正確方式流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • win10 64位 jdk1.8的方法教程詳解

    win10 64位 jdk1.8的方法教程詳解

    這篇文章主要介紹了win10 64位 jdk1.8的方法教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • java 動(dòng)態(tài)增加定時(shí)任務(wù)示例

    java 動(dòng)態(tài)增加定時(shí)任務(wù)示例

    本篇文章主要介紹了java 動(dòng)態(tài)增加定時(shí)任務(wù)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • 淺析JDK和Tomcat的安裝與配置方法

    淺析JDK和Tomcat的安裝與配置方法

    這篇文章主要介紹了JDK和Tomcat的安裝與配置方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-12-12
  • java WebSocket的實(shí)現(xiàn)以及Spring WebSocket示例代碼

    java WebSocket的實(shí)現(xiàn)以及Spring WebSocket示例代碼

    本篇文章主要介紹了java WebSocket的實(shí)現(xiàn)以及Spring WebSocket,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Java Socket通信之聊天室功能

    Java Socket通信之聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Java Socket通信之聊天室功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 解決idea2020.1找不到程序包和符號(hào)的問(wèn)題

    解決idea2020.1找不到程序包和符號(hào)的問(wèn)題

    這篇文章主要介紹了解決idea2020.1找不到程序包和符號(hào)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • SpringBoot+ruoyi框架文件上傳和下載的實(shí)現(xiàn)

    SpringBoot+ruoyi框架文件上傳和下載的實(shí)現(xiàn)

    文件的上傳和下載功能,是項(xiàng)目開(kāi)發(fā)過(guò)程中比較常見(jiàn)的業(yè)務(wù)需求,本文主要介紹了SpringBoot+ruoyi框架文件上傳和文件下載的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java基礎(chǔ)之簡(jiǎn)單的圖片處理

    Java基礎(chǔ)之簡(jiǎn)單的圖片處理

    這篇文章主要介紹了Java基礎(chǔ)之簡(jiǎn)單的圖片處理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

黔东| 揭西县| 彰化市| 长葛市| 乐都县| 象山县| 区。| 云和县| 尚义县| 鹿邑县| 庆元县| 阜南县| 集安市| 台前县| 上饶县| 合山市| 定安县| 安阳县| 花莲县| 苍山县| 灯塔市| 东源县| 清镇市| 德兴市| 当雄县| 昌吉市| 四会市| 南涧| 福泉市| 宽城| 额尔古纳市| 长垣县| 资兴市| 苏尼特右旗| 调兵山市| 聂荣县| 兰州市| 郴州市| 郯城县| 沛县| 仙游县|