---恢复内容开始---
网络编程主要用于计算机与计算机(手机、平板)之间的数据传输问题。
网络编程不需要基于html就可以完成数据的传输。
网络编程的三要素:ip+端口号+协议。
ip地址=网络号+主机号
ip地址的分类:
A:一个网络号+3个主机号 (政府用)
B:两个网络号+2个主机号 (教育机构用)
C:三个网络号+1个主机号 (民用)
InetAddress.getByName -- 根据主机名或10禁止进制ip地址获取主机
InetAddress.getAllByName -- 根据域名获取ip 一个域名可能对应多态服务器
协议:tcp/udp
udp发送消息(会丢失数据):
发送端:
1、建立udp发送信息的通道,只负责发送,不负责ip和端口的绑定。DataGramSocket类
2、准备消息 将发送的消息放到udp包中。DataGramPacket
3、发送数据。
4、关闭连接,释放端口。
接收端:
1、建立udp发送信息的通道,绑定对应接收消息的端口。
2、建立接收消息的空包。
3、接收端接收数据,接收端为一直等待类型,等到消息处理后才关闭。
4、DataGramPacket.getLength()存储接收到消息的长度。
tcp协议
tcp协议是面向连接的可靠传输协议,类似迅雷等需要不丢失数据的可用,而且udp只可以传输64kb上限的消息,tcp协议没有传输大小上线,但是因为在传输前需要三次握手,所有速度相对udp慢。
tcp客户端:Socket类。
Socket自带输入输出流,可以发送接收消息。
tcp服务端:ServerSocket类
下面是编写了一份类似qq的聊天类:
class ChatClint{ public static void main(String[] args) throws IOException{ Socket socket = new Socket(InetAddress.getLocalHost(),9090); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream()); //获取键盘读取数据 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line = bufferedReader.readLine())!=null){ outputStreamWriter.write(line+"\r\n"); outputStreamWriter.flush(); BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(socket.getInputStream())); String we = null; while ((we = bufferedReader1.readLine())!=null){ System.out.println(we); } } socket.close(); } }
class ChatServer{ public static void main(String[] args) throws IOException{ ServerSocket serverSocket = new ServerSocket(9090); Socket socket = serverSocket.accept(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = null; while ((line = bufferedReader.readLine())!=null){ System.out.println("服务端接收数据"+line); //回复一下人家 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream()); BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(System.in)); String next = null; while((next = bufferedReader1.readLine())!=null){ outputStreamWriter.write(next+"\r\n"); outputStreamWriter.flush(); } } serverSocket.close(); } }
---恢复内容结束---