黑马程序员--网络编程
来源:互联网 发布:数据库中的mvcc是什么 编辑:程序博客网 时间:2024/06/07 02:30
------- android培训、java培训、期待与您交流! ----------
网络编程
网络编程的目的:实现计算机之间的通信。
网络编程中的主要的问题:
要想让处于网络中的主机互相通信,只是知道通信双方地址还是不够的,还必须遵循一定的规则。有两套参考模型:
- OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广。
- TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。
- OSI七层模型:物理层、数据链路层,网络层,传输层,会话层,表示层,应用层。
- TCP/IP五层协议: 物理层、数据链路层,网络层,传输层,应用层。
运输层协议中的两个重要协议:
- 传输控制协议TCP(Transmission Control Protocol):是面向连接的运输层协议。即应用进程(或程序)在使用TCP协议之前,必须先建立TCP连接,在传输完毕后,释放已经建立的连接。利用TCP协议进行通信的两个应用进程,一个是服务器进程。另一个是客户进程。
- 用户数据报协议UDP(UserDatagram Protocol):用户数据报协议UDP是面向无连接的运输层协议。应用进程(或程序)在使用UDP协议之前,不必先建立连接。所以结束时也没有连接需要释放。因此,减少了开销和发送数据之前的时延。
- 域名:www.baidu.com
- IP 地址:115.239.211.110
端口号:端口号是一个16 位的整数 0~65535。其中,0~1023被预先定义的服务通信占用(如telnet占用端口23,http占用端口80等)。除非我们需要访问这些特定服务,否则,就应该使用 1024~65535 这些端口中的某一个进行通信,以免发生端口冲突。
- 连接到远程主机
- 绑定到端口
- 接收从远程机器来的连接请求
- 监听到达的数据
- 发送数据
- 接收数据
- 关闭连接
客户端Socket的工作步骤:
- 创建 Socket。
- 打开连接到 Socket 的输入/出流。使用 getInputStream()方法获得输入流,使用getOutputStream()方法获得输出流。
- 按照一定的协议对 Socket 进行读/写操作。
- 关闭 Socket。断开客户端到服务器的连接,释放线路
- 调用ServerSocket(int port) 创建一个服务器端套接字,并绑定到指定端口上
- 调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
- 调用Socket类的 getOutputStream 和getInputStream 获取输出流和输入流,开始网络数据的发送和接收。
- 最后关闭通信套接字。
类DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。DatagramPacket 对象封装了UDP数据报,在数据报中包含了客户端的IP地址和端口号以及服务器的IP地址和端口号。
UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
URL编程:又叫做统一资源定位符,它表示 Internet 上某一资源的地址,通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp 站点。浏览器通过解析给定的 URL 可以在网络上查找相应的文件或其他资源。
URL的基本结构由5部分组成:
<传输协议>://<主机名>:<端口号>/<文件名>
例如: http://192.168.1.100:8080/helloworld/index.jsp
InetAdress类:对象含有一个Internet主机地址的域名和IP地址。
public class TestInntAddress{public static void main(String args[]) throws UnknownHostException {//获取黑马官网的域名和ip地址InetAddress inetAddress=InetAddress.getByName("www.itheima.com");System.out.println(inetAddress);//www.itheima.com/115.29.149.42//获取本地域名和ip地址InetAddress address=InetAddress.getLocalHost();System.out.println(address);//USER-89757/192.168.1.101}}
利用socket和severSocket实现服务端向服务端发送文件代码.
package com.testDemo;import java.io.*;import java.net.*;import org.junit.Test;public class SeverCientTest {@Testpublic void startServer() throws IOException{Server server=new Server();server.sendFile();}@Testpublic void startClient() throws IOException{Client client=new Client();client.receiveFile();}}//服务端class Server {public void sendFile() throws IOException {// 创建serversocket对象,端口号8889ServerSocket serverSocket = new ServerSocket(8889);// 接受客户端请求,并得到socket 对象Socket socket = serverSocket.accept();// 传输文档// 1.读取硬盘上文档InputStream in = new FileInputStream("三国演义.txt");InputStreamReader reader = new InputStreamReader(in);BufferedReader bufferedReader = new BufferedReader(reader);// 2.传到客户端OutputStream out = socket.getOutputStream();PrintWriter printWriter = new PrintWriter(out);String str = null;int i = 0;while ((str = bufferedReader.readLine()) != null) {if (i != 0) {printWriter.write("\n");}printWriter.write(str);i++;}// 关闭资源in.close();reader.close();bufferedReader.close();printWriter.close();out.close();socket.close();serverSocket.close();}}//客户端class Client {public void receiveFile() throws IOException {// 连接服务端主机InetAddress address = InetAddress.getByName("127.0.0.1");// 创建socket对象Socket socket = new Socket(address, 8889);// 接受服务端的信息InputStream in = socket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));OutputStream out = new FileOutputStream("来自服务端的文件.txt");BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(out));//从输入流读取数据并写入硬盘String str;int i = 0;while ((str = reader.readLine()) != null) {if (i != 0)bufferedWriter.write("\n");bufferedWriter.write(str);i++;}// 关闭流资源bufferedWriter.close();out.close();in.close();reader.close();socket.close();}}
------- android培训、java培训、期待与您交流! ----------
- 【黑马程序员】网络编程
- 黑马程序员 网络编程
- 黑马程序员:网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 黑马程序员:网络编程
- 黑马程序员--网络编程
- 黑马程序员--网络编程
- 黑马程序员-网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 黑马程序员-----网络编程
- 黑马程序员-网络编程
- 黑马程序员-网络编程
- 黑马程序员 网络编程
- 黑马程序员----- 网络编程
- 黑马程序员 网络编程
- 黑马程序员--网络编程
- 第一个Mac App - TrackMix
- 用好VS2010扩展管理器-NHibernate生成
- sqlser 常用高级查询功能汇总
- 数据库中如何在指定的位置插入列
- 黑马程序员--Java语言基础2
- 黑马程序员--网络编程
- java创建mysql表
- C++ 中extern 的用法
- Maven创建并管理Web项目(上传Web项目的API的JAR到Nexus 私服上)
- BitmapFactory.Options
- vim 快捷键使用
- 2091 空心三角形
- iOS提交后申请加急审核
- OK6410的Boa服务器移植