TCP网络编程
2022/5/5 22:42:40
本文主要是介绍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 }
这篇关于TCP网络编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享