编程语言
首页 > 编程语言> > TCP网络编程

TCP网络编程

作者:互联网

1.前置基础知识:

一、网络编程中的两个主要问题:
1.如何准确定位网络上的一台或多台主机,定位主机上的特定应用
2.找到主机后如何进行高效的传输

二、网络编程中的两个要素:
1.提供IP和端口号解决主机寻找问题
2.提供网络协议(如TCP/IP)实现高效传输

三、通信要素一:IP和端口号
1.IP:唯一标识Internet上的计算机
2.在Java中使用InetAddress代替IP
3.IP的分类:IPv4和IPv6 万维网和局域网
4.域名:www.baidu.com www.mi.com
5.本地回路地址:127.0.0.1 ,对应localhost
6.实例化InetAddress的两个方法:getByName(String host),getLocalHost()
两个常用方法:getHostName()/getHostAddress()
7.端口号:正在计算机上运行的进程
要求:不同进程的端口号不同
范围:0——65535
8.端口号与IP构成一个网络构接字

代码的有关测试:
 1 public class InetAddressTest {
 2     public static void main(String[] args) {
 3         try {
 4             InetAddress inet1 = InetAddress.getByName("192.168.10.14");
 5             System.out.println(inet1);
 6             //获取域名的IP地址
 7             InetAddress inet2 = InetAddress.getByName("www.baidu.com");
 8             System.out.println(inet2);
 9             //获取本机的IP地址
10             InetAddress inet3 = InetAddress.getLocalHost();
11             System.out.println(inet3);
12             System.out.println(inet2.getHostName());
13             System.out.println(inet2.getHostAddress());
14         } catch (UnknownHostException e) {
15             throw new RuntimeException(e);
16         }
17     }
18 }

 

 

2.实现TCP的网络编程:

分为两个部分实现:
1.客户端
(1).创建socket对象,指明IP和端口号
(2).获取一个输出流(getOutputStream()),用于输出数据
(3).写出数据操作(write())
(4).关闭操作

2.服务器
(1).创建服务端的ServerSocket,指明服务端的端口号
(2).调用accept()方法来接受客户端的socket
(3).获取输入流(getInputStream())
(4).读取输入流中的数据(使用ByteArrayOutputStream()来进行实现)
(5).关闭操作

代码示例:
 1 public class TCPTest1 {
 2     public static void client()  {//客户端
 3         Socket socket = null;
 4         OutputStream os = null;
 5         try {
 6             InetAddress inet = InetAddress.getByName("127.0.0.1");
 7             //1.创建socket对象,指明服务端的IP和端口号
 8             socket = new Socket(inet,8899);
 9             //2.获取一个输出流,用于输出数据
10             os = socket.getOutputStream();
11             //3.写出数据的操作
12             os.write("你好,我是客户端A".getBytes(StandardCharsets.UTF_8));
13         } catch (IOException e) {
14             e.printStackTrace();
15         } finally {
16             //4.资源的关闭
17             if (os != null) {
18                 try {
19                     os.close();
20                 } catch (IOException e) {
21                     e.printStackTrace();
22                 }
23             }
24             if (socket != null) {
25                 try {
26                     socket.close();
27                 } catch (IOException e) {
28                     e.printStackTrace();
29                 }
30             }
31         }
32     }
33 
34     public static void server()  {//服务端
35         ServerSocket ss = null;
36         Socket socket = null;
37         InputStream is = null;
38         ByteArrayOutputStream bos = null;
39         try {
40             //1.创建服务器端的ServerSocket,指明自己的端口号
41             ss = new ServerSocket(8899);
42             //2.调用accept()方法来接收客户端的socket
43             socket = ss.accept();
44             //3.获取输入流
45             is = socket.getInputStream();
46             //4.读取输入流中数据
47             bos = new ByteArrayOutputStream();
48             byte[] str = new byte[5];
49             int len;
50             while ((len = is.read(str)) != -1) {
51                 bos.write(str,0,len);
52             }
53             System.out.println(bos.toString());
54         } catch (IOException e) {
55             e.printStackTrace();
56         } finally {
57             //5.关闭资源
58             if (bos != null) {
59                 try {
60                     bos.close();
61                 } catch (IOException e) {
62                     e.printStackTrace();
63                 }
64             }{
65                 try {
66                     is.close();
67                 } catch (IOException e) {
68                     e.printStackTrace();
69                 }
70             }
71             if (is != null)
72             if (socket != null) {
73                 try {
74                     socket.close();
75                 } catch (IOException e) {
76                     e.printStackTrace();
77                 }
78             }
79             if (ss != null) {
80                 try {
81                     ss.close();
82                 } catch (IOException e) {
83                     e.printStackTrace();
84                 }
85             }
86         }
87     }
88 }
 1 public class TCPTest2 {
 2 
 3     public void client() throws IOException {
 4         Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9090);
 5         OutputStream os = socket.getOutputStream();
 6         FileInputStream fis = new FileInputStream(new File("beauty.png"));
 7         byte[] buffer = new byte[1024];
 8         int len;
 9         while ((len = fis.read()) != -1) {
10             os.write(buffer,0,len);
11         }
12         socket.shutdownOutput();//客户端不在进行数据输出
13         //接受服务端发送的数据
14         InputStream is = socket.getInputStream();
15         ByteArrayOutputStream bos = new ByteArrayOutputStream();
16         byte[] bufferr = new byte[20];
17         int len1;
18         while ((len1 = is.read(buffer)) != -1) {
19             bos.write(bufferr,0,len1);
20         }
21         System.out.println(bufferr.toString());
22 
23         fis.close();
24         os.close();
25         socket.close();
26     }
27 
28     public void server() throws IOException {
29         ServerSocket ss = new ServerSocket(9090);
30         Socket socket = ss.accept();
31         InputStream is = socket.getInputStream();
32         FileOutputStream fos = new FileOutputStream(new File("beauty.png"));
33         byte[] buffer = new byte[1024];
34         int len;
35         while ((len = is.read(buffer)) != -1) {
36             fos.write(buffer,0,len);
37         }
38         //服务端给予客户端反馈
39         OutputStream os = socket.getOutputStream();
40         os.write("已收到信息".getBytes(StandardCharsets.UTF_8));
41 
42         fos.close();
43         is.close();
44         socket.close();
45         ss.close();
46     }
47 }

 

标签:socket,InetAddress,编程,网络,TCP,IOException,new,close,null
来源: https://www.cnblogs.com/jue1e0/p/16226544.html