1、 网络编程作为Java的主要应用之一,可以使用java.net包来实现。
2、 同一网络或不同网络中计算机的通讯需要特定的一套规则,即协议。
3、 协议的本质可以理解成就一串字符串,它分报头和报文,报头里面装发送的地址,IP等,我们传递的内容都在报文里面。
4、 ISO国际标准化组织提供的OSI开放系统互连模型,提出标准7层模型分别是:应用层,表示层,会话层,传输层,网络层,数据链层和物理层。但java里已经简化成了四层:分别是应用层,传输层,网络层和网络接口层。
5、 HTTP、FTP、BOOTP、SMTP….全属于应用层;TCP/UDP属于传输层;IP属于网络层。
6、 TCP与UDP的区别:TCP遵守三次握手原则,即发送之前会先向对方发出请求,等对方准备好了再发送。这样保证协议的正确性但速度慢,而UDP与它相反,所以速度比它快,但是不安全,数据容易丢失。它适用与视频之间的连接。
7、 向另一台计算机请求某些服务的计算机即称为客户端,而处理请求的计算机称为服务器。
8、 Java.net包中包含下列重要的类:
1)InetAddress类:封装计算机的IP地址和DNS。
2)Socket类:发送TCP消息。
3)ServerSocket类:创建服务器,用于接收请求。
4)DatagramSocket类:用于发送或接收数据包。基于UDP。
5)DatagramPacket类:数据容器(封包)的作用。
6)URL类:代表统一源定位符的对象。
7)URLConnection:所有代表应用程序与URL之间通信链接的类的超类。
9、 套接字(Socket)是一种进程间的数据交换机制。这些进程可以再同一机器上,也可以在通过网络连接的不同机器上。换句话说,套接字起到通信端点的作用。
10、TCP/IP是最可靠的双向流协议。使用TCP/IP可以发送任意数量的数据。在java.net包中,有两个类来实现Socket通信:Socket和ServerSocket类。
11、实际上套接字只是计算机上已编号的端口,如果发送方和接收方计算机确定好端口,他们就可以通信了。
12、服务端的代码:
public class MyServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Server starting......");
try {
ServerSocket server = new ServerSocket(8080);
while (true) {
Socket socket = server.accept();
System.out.print("客户端说:");
InputStream in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println(br.readLine());
br.close();
in.close();
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
13、客户端的代码:
public class MyClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket client = new Socket("127.0.0.1",8080);
OutputStream out = client.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
System.out.println("你想对她说什么?");
Scanner scan = new Scanner(System.in);
bw.write(scan.next());
bw.close();
out.close();
client.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}