一:网络编程简介
1:网络协议
(1)OSI网络传输的七层结构(从下到上)
物理层-à数据链路层---〉网络层----〉传输层----〉会话层----〉表示层----〉应用层
(2)TCP/IP协议(实际中应用的标准)
链路层---à网络层----〉传输层-----〉应用层
2:各层主要的协议:
网络层:IP协议
传输层:TCP/UDP
应用层:HTTP/FTP/TELNET
二:TCP编程
1:特点:
(1)建立连接,安全,效率低(联想打电话)
(2)把要传输的内容当作流的形式传输
2:客户端编程步骤:
(1)创建一个套接字(Socket)(用来跟服务器端进行直接通信)
(2)从这个套接字里面获得输入和输出流
(3)读写操作
(4)关闭流
(5)关闭套接字
3:服务器端:
(1)创建一个服务套接字(ServerSocket):主要用来判断是否有新的客户端访问,如果有的话,
就创建一个新的服务员。
(2) 创建一个与客户端打交道的套接字(Socket)(服务员)
(3)从Socket中获得输入和输出流
(4)读写操作
(5)关闭流
(6)关闭Socket
(7) 如果服务器不再为客户提供服务了,关闭ServerSocket(一般不会关闭)
三:UDP编程
1:特点:
(1)无连接的,不安全,效率高,(联想发邮件)
(2)把要传输的内容分隔成一个一个的数据报进行传输。
2:编程步骤:
(1) 创建一个根网络打交道的对象DatagramSocket
(2) 把自己的数据打包DatagramPacket
(3)通过DatagramSocket把自己的数据报发送过去。
注意:对网络中的输入输出流的包装。和IO的一样;看你要个服务端或客户端发送怎样的数据;
socket
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
server:
private Socket socket;
private ServerSocket ss;
public Server() throws IOException {
ss = new ServerSocket(7777);
while (true) {
socket = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
System.out.println("you input is : " + br.readLine());
}
}
Client:
Socket client;
PrintWriter pw;
public Client() throws UnknownHostException, IOException {
client=new Socket("Socket服务器IP",7777);
pw=new PrintWriter(client.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
pw.write(br.readLine());
pw.close();
br.close();
}