【网络编程】
2021/11/29 11:06:58
本文主要是介绍【网络编程】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
网络编程
软件结构
- Client/Server(C/S结构)
- Browser/Server(B/S结构)
Windows系统中执行命令:
//查看占用8888端口号的进程PID netstat -aon|findstr 8888 //显示结果,找到占用8888端口号的PID TCP 0.0.0.0:8888 0.0.0.0:0 LISTENING 2696 //强制关闭(杀死) taskkill /F /pid 2696
注意,需要使用管理员的权限来运行命令窗口
Ubuntu系统中执行命令:
//查看占用8888端口号的进程PID netstat -anp | grep :8888 //显示结果,找到占用8888端口号的PID tcp 0 0 :::8888 :::* LISTEN 3626/java //强制关闭(杀死) kill -9 3626
TCP/IP编程
可靠的,面向右连接的
了解客户端和服务端的步骤;
ServerSocket
:服务端
- 创建客户端对象:
serverSocket=new ServerSocket(9909);
- 等待客户端发送socket:
Socket s=serverSocket.accept();
- 获取输入流输出流:
s.getOutputStream();
s.getInputStream();
- 包装流:缓冲流或者对象流
- 读数据写数据
- 关闭资源:
- 关闭流;
- 关闭severSocket.close();
Socket
:客户端
- 创建客户端对象:
Socket s=new Socket("127.0.0.1",9909);
- 获取输入输出流:
- 包装流:
- 读写数据:
- 关闭资源:
案例
package com.chapter12.classcode; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class TcpServer { //服务器端 public static void main(String[] args) { ServerSocket serverSocket=null; BufferedReader br=null; BufferedWriter bw=null; try { serverSocket=new ServerSocket(9909); System.out.println("等待客户端"); //等待客户端发送过来socket Socket s=serverSocket.accept(); System.out.println("拿到客户端的soket" + s); //读输入输出流 InputStream in = s.getInputStream(); //包装流 br=new BufferedReader(new InputStreamReader(in)); //读数据,写数据 String readLine = br.readLine();//会造成堵塞,一直等着读数据 System.out.println(readLine); // OutputStream out = s.getOutputStream(); // bw=new BufferedWriter(new OutputStreamWriter(out)); // bw.write("收到"); // bw.flush(); } catch (IOException e) { e.printStackTrace(); }finally { if (br!=null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } if (bw!=null) { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } }if (serverSocket!=null) { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
package com.chapter12.classcode; import java.io.*; import java.net.Socket; public class TcpClient { //客户端 public static void main(String[] args) { BufferedWriter bw=null; BufferedReader br=null; OutputStream os=null; Socket s=null; //创建socket try { s=new Socket("127.0.0.1",9909); //给服务器端写数据 os=s.getOutputStream(); //包装流 先把字节流转换成字符流 bw=new BufferedWriter(new OutputStreamWriter(os)); //读写数据 bw.write("hello world bw.flush(); /* InputStream in = s.getInputStream(); br=new BufferedReader(new InputStreamReader(in)); String s1 = br.readLine(); System.out.println(s1);*/ } catch (IOException e) { e.printStackTrace(); }finally { if (os!=null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } }if (bw!=null) { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } }if (br!=null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if (s!=null) { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
先启动服务端,服务端会等待客户端启动然后建立连接,再启动客户端,
结果如下:
UDP编程
面向无连接的,不可靠的,高效率;
在UDP通信协议下,两台计算机之间进行数据交互,并不需要先建立连接,客户端直接往指定的IP和端 口号上发送数据即可,但是它并不能保证数据一定能让对方收到。
java.net.DatagramSocket
和 java.net.DatagramPacket
是UDP编程中使用到的俩个类,客户端 和服务器端都使用这个俩类
java.net.DatagramSocket
负责接收和发送数据
java.net.DatagramPacket
负责封装要发送的数据和接收到的数据
URL
URI(uniform resource identifier),统一资源标识符,用来唯一的标识一个资源。
URL(uniform resource locator),统一资源定位符,它是一种具体的URI,即URL可以用来标识一个资 源,而且还指明了如何定位这个资源。
例如,http://127.0.0.1/hello ,这就是一个URL,它不仅标识了一个资源,还能定位这个资源。
例如,/hello ,这就是一个URI,它只是标识了一个资源。
这篇关于【网络编程】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行