ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

TCP网络编程

2022-05-05 22:03:01  阅读:210  来源: 互联网

标签:socket InetAddress 编程 网络 TCP IOException new close null


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有