使用TCP协议开发发送端和接收端
在TCP协议中,我们一般认为发送端为客户端,接收端为服务器端。
首先来开发客户端:
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
8 @SuppressWarnings("unused")
9 public class TCPOfSend {
10 public static void main(String[] args) throws Exception{
11 Socket s = new Socket("10.0.13.205",7892); //跟指定ip,port建立连接
12 OutputStream output = s.getOutputStream();
13 output.write("www.baidu.com".getBytes()); //向服务器端发送数据
14 s.close();
15 }
16 }
在客户端,直接使用Socket就成,接着第一步就应该指定IP和端口号。接着,与UDP不一样,UDP发送数据使用的是“包裹”,而TCP则使用“IO流”来发送。这里因为是发送数据,所以是“走出去”,因此调用s的getOutputStream方法,有了输出流,就可以往里面写入数据了。上面的代码中我是把一个字符串变成了一个字节数组,写到output里边儿,然后再输出,最后关闭。
我们可以知道,使用TCP一般就是发送大量数据,因此在TCP中我们是用的是IO流,而像UDP的话,它单个数据包的大小是有限制的。
接着再来开发服务器端:
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 public class TCPOfReceive {
9 public static void main(String[] args) throws Exception {
10
11 ServerSocket ss = new ServerSocket(7892);
12 Socket client = ss.accept(); //接收,建立跟客户端的连接
13 InputStream input = client.getInputStream();
14
15 byte[] buf = new byte[1024];
16 int length = input.read(buf);
17 String str = new String(buf,0,length);
18 System.out.println(str);
19
20 client.close(); //先关闭Socket对象
21 ss.close(); //再关闭ServerSocket对象
22 }
23 }
第一步使用ServerSocket创建对象,然后需要监听端口号。接着,TCP协议的话,它是需要先建立连接的,建立连接之后才能接收数据。因此调用accep方法建立连接,这个时候程序会在这里暂停,等待建立连接。当客户端new出来一个Socket之后,就会建立连接。这个方法返回的是一个Socket对象。
接着,因为发送数据的时候使用的是输出流,那这里肯定就使用输入流了。接下来的操作都很常规。来看看效果(注意,启动程序的时候先启动receive,再启动send):