使用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):

 

posted @ 2021-02-28 09:48  EvanTheBoy  阅读(588)  评论(0)    收藏  举报