使用TCP协议循环发送数据

循环很简单,像这样就OK:

TCPOfSend.java:

 1 package com.hw.TCP0226;
 2 
 3 import java.io.IOException;
 4 import java.io.OutputStream;
 5 import java.net.Socket;
 6 import java.net.UnknownHostException;
 7 import java.util.Scanner;
 8 
 9 @SuppressWarnings("unused")
10 public class TCPOfSend {
11     public static void main(String[] args) throws Exception{
12         Socket s = new Socket("10.0.13.205",7892);  
13 
14         OutputStream output = s.getOutputStream();
15         Scanner scan = new Scanner(System.in);
16         while(true)
17         {
18             String str = scan.nextLine();
19             if(str.equals("end")) break;
20             byte[] buf = str.getBytes();
21             output.write(buf);
22         }
23         s.close();
24     }
25 }

 TCPOfReceive.java:

 1 package com.hw.TCP0226;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 @SuppressWarnings("unused")
 9 public class TCPOfReceive {
10     public static void main(String[] args) throws Exception {
11          
12         ServerSocket ss = new ServerSocket(7892);
13         Socket client = ss.accept(); 
14         System.out.println("接收到了一个数据");
15         InputStream input = client.getInputStream();
16         
17         byte[] buf = new byte[1024];
18         while(true)
19         {
20             int length = input.read(buf);
21             System.out.println(length);
22             String str = new String(buf,0,length);
23             System.out.println(str);
24         }
25     }
26 }

但是啊,这样有一个问题:

什么原因导致的呢?这是因为,在客户端写了一个,如果发送一个“end”过去,循环就会break掉,那么这个时候就不会再发送任何数据了。所以这个时候的length肯定就为-1.我length都是-1了,那很自然读取数据没有任何意义,因此报错。

这么改一下就没事了

TCPOfReceive.java:

 1 package com.hw.TCP0226;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 @SuppressWarnings("unused")
 9 public class TCPOfReceive {
10     public static void main(String[] args) throws Exception {
11          
12         ServerSocket ss = new ServerSocket(7892);
13         Socket client = ss.accept(); 
14         System.out.println("接收到了一个数据");
15         InputStream input = client.getInputStream();
16         
17         byte[] buf = new byte[1024];
18         int length = -1;
19         while((length = input.read(buf)) > -1)
20         {
21             System.out.println(length);
22             String str = new String(buf,0,length);
23             System.out.println(str);
24         }
25         client.close();
26         ss.close();
27     }
28 }

 

 

 

 

 没有问题。而UDP协议就不一样,他们只顾发送和接受,连接什么的更是不可能建立的。

posted @ 2021-02-28 10:36  EvanTheBoy  阅读(706)  评论(0编辑  收藏  举报