网络编程(TCP/IP编程)
网络编程是底层,不等同于网站编程
网络基础
什么是计算机网络
计算机网络的主要功能
什么是网络通信协议
通信协议分层的思想
举例:Java虚拟机屏蔽了操作系统的区别、
hibernate屏蔽了不同数据库的接口
网络通信接口
TCP/IP参考模型
应用层
传输层
网络层
物理+数据链路层
TCP/IP协议
TCP协议:可靠的连接
UDP协议:不可靠的连接
IP地址
要事为先,技术,用到的先学
管理:管理自己的时间和精力
沟通
Socket通信
两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,
这个双向链路的一端称为一个Socket
Socket通常用来实现client-server连接
java.net包中定义的两个类Socket和ServerSocket,分别用来实现
双向连接的client和server端
建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)
TCP端口和UDP端口分开,TCP 8888端口和UDP 8888端口不是同一个
可以共同存在,每一个都有65536个端口
TCP通信
做网络应用,应该首启动server再启动client,server和client一块儿开发
UDP通信
不可靠
效率高
数据报/非连接
UDP通信原则上不分server端和cilent端,它都是同一个插座DatagramSocket类
网络编程是底层,不等同于网站编程
网络基础
什么是计算机网络
计算机网络的主要功能
什么是网络通信协议
通信协议分层的思想
举例:Java虚拟机屏蔽了操作系统的区别、
hibernate屏蔽了不同数据库的接口
网络通信接口
TCP/IP参考模型
应用层
传输层
网络层
物理+数据链路层
TCP/IP协议
TCP协议:可靠的连接
UDP协议:不可靠的连接
IP地址
要事为先,技术,用到的先学
管理:管理自己的时间和精力
沟通
Socket通信
两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,
这个双向链路的一端称为一个Socket
Socket通常用来实现client-server连接
java.net包中定义的两个类Socket和ServerSocket,分别用来实现
双向连接的client和server端
建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port number)
TCP端口和UDP端口分开,TCP 8888端口和UDP 8888端口不是同一个
可以共同存在,每一个都有65536个端口
TCP通信
做网络应用,应该首启动server再启动client,server和client一块儿开发
这里讲的都是同步式的网络编程,还有异步式的网络编程
/*TCPServer.java*/
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String args[]) throws Exception{
ServerSocket ss = new ServerSocket(6666);
while (true) {
Socket s = ss.accept(); //接受客户端的连接,阻塞式的
System.out.println("a cilent connect");
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF()); //阻塞式的
dis.close();
s.close();
}
}
}
/*TCPCilent.java*/
import java.net.*;
import java.io.*;
public class TCPCilent {
public static void main(String args[]) throws Exception{
Socket s = new Socket("127.0.0.1", 6666); //server端IP和端口,client端端口系统随机分配
//用流来互相说话
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("hello server!");
dos.flush();
dos.close();
s.close();
}
}
UDP通信
不可靠
效率高
数据报/非连接
UDP通信原则上不分server端和cilent端,它都是同一个插座DatagramSocket类
/*TestUDPServer.java*/
import java.net.*;
public class TestUDPServer {
public static void main(String args[]) throws Exception {
byte buf[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length); //定义存数据的包裹
DatagramSocket ds = new DatagramSocket(5678); //定义插座
while (true) {
ds.receive(dp); //阻塞式的
System.out.println(new String(buf, 0, dp.getLength()));
}
}
}
/*TestUDPCilent.java*/
import java.net.*;
public class TestUDPCilent {
public static void main(String args[]) throws Exception {
byte[] buf = (new String("Hello")).getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
new InetSocketAddress("127.0.0.1", 5678)
);
DatagramSocket ds = new DatagramSocket(9999);
ds.send(dp);
ds.close();
}
}