使用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协议就不一样,他们只顾发送和接受,连接什么的更是不可能建立的。