网络编程
软件架构:
CS架构:客户端-服务器
BS架构:浏览器-服务器
不过现在的很多软件都是一种混合开发 ,就是将CS架构和BS架构融合起来。
网络编程三要素
如何准确定位一台或多态主机:使用IP地址
如何定位主机上的特定的应用:使用端口号
如何可靠、高效地进行数据传输:规范通信协议
IP地址
IP地址:网络中的一台计算机设备做唯一编号
IP地址分类:
分类方式一:
IPv4:占用4个字节,表示为a.b.c.d 的形式,以点分十进制表示
IPv6:占用16个字节
分类方式二:
公网地址(万维网使用)和私网地址(局域网使用)192.168.开头的就是私有地址
本地回路地址:127.0.0.1
域名:便捷地记录ip地址
www.baidu.com kuoz.top
域名使用中通过DNS解析成IP再进行访问的
端口号
端口号可以唯一标识主机中的进程
不同的进程分配不同的端口号
范围:0~65535
网络通信协议
OSI模型:过于理想化,没能实现
TCP/IP:分为应用层、传输层、网络层、物理+数据链路层
InetAddress类
InetAddress类的一个实例就代表一个具体的ip地址
实例化方式:
InetAddress getByName(String host)
InetAddress getLocalHost()
TCP协议和UDP协议
计算机网络的重要重要指示,在此处简要了解。
TCP的Socket网络编程
网络上具有唯一标识的IP地址和端口号的组合,唯一可识别的标识符套接字(Socket)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 @Test public void client () throws IOException { int port = 8888 ; InetAddress address = InetAddress.getByName("10.10.208.62" ); Socket socket = new Socket (address, port); OutputStream os = socket.getOutputStream(); os.write("嗨嗨嗨, 服务器我来辣!" .getBytes()); os.close(); socket.close(); } @Test public void server () throws IOException { int port = 8888 ; ServerSocket serverSocket = new ServerSocket (port); Socket socket = serverSocket.accept(); System.out.println("客户端连接成功,等待接收数据..." ); System.out.println("收到了来自" +socket.getInetAddress().getHostAddress()+"的连接" ); InputStream is = socket.getInputStream(); byte [] buffer = new byte [5 ]; ByteArrayOutputStream baos = new ByteArrayOutputStream (); int len; while ((len = is.read(buffer)) != -1 ) { baos.write(buffer, 0 , len); } System.out.print(baos.toString()); System.out.print("\n接收完毕" ); is.close(); socket.close(); }
当客户端需要接收服务器发送的回复信息时出现的死锁问题:
客户端向服务器发送数据后,服务器向客户端回复信息 ,客户端接收服务器的接受信息。
如果直接在客户端创建输入流并打印出来,而不进行操作,那么服务器端会因为认为Socket没有终止发送信息而不回复回复信息 ,客户端没有接收到数据,那么也不会关闭Socket,这样就相互锁在了一起。
解决方法是在客户端发送数据后socket.shutdownOutput();来表示已经发送完毕。
UDP网络编程
TCP有三次握手,建立连接,是可靠的
UDP不需要建立连接,是不可靠的
URL编程
URL(Uniform Resource Locator):统一资源定位符
一个具体的URL就对应着互联网上某一资源的地址
URL的格式:
http:// 127.0.0.1:8080/…?name=Tom
应用层协议 ip地址 端口号 资源地址 参数列表
URL类
Java中提供了URL类来进行URL的相关操作
常见的方法:
1 2 3 4 5 6 7 8 9 10 public String getProtocol () ;public String getHost () ;public String getPort () ;public String getPath () ;public String getFile () ;public String getQuery () ;HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection;