黑马程序员--网络编程

来源:互联网 发布:数据库中的mvcc是什么 编辑:程序博客网 时间:2024/06/07 02:30

------- android培训、java培训、期待与您交流! ----------


网络编程

网络编程的目的:实现计算机之间的通信。


网络编程中的主要的问题:

要想让处于网络中的主机互相通信,只是知道通信双方地址还是不够的,还必须遵循一定的规则。有两套参考模型:

  1. OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广。
  2. TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

  • OSI七层模型:物理层、数据链路层,网络层,传输层,会话层,表示层,应用层。
  • TCP/IP五层协议: 物理层、数据链路层,网络层,传输层,应用层。

运输层协议中的两个重要协议:

  1. 传输控制协议TCP(Transmission Control Protocol):是面向连接的运输层协议。即应用进程(或程序)在使用TCP协议之前,必须先建立TCP连接,在传输完毕后,释放已经建立的连接。利用TCP协议进行通信的两个应用进程,一个是服务器进程。另一个是客户进程。
  2.  用户数据报协议UDP(UserDatagram Protocol):用户数据报协议UDP是面向无连接的运输层协议。应用进程(或程序)在使用UDP协议之前,不必先建立连接。所以结束时也没有连接需要释放。因此,减少了开销和发送数据之前的时延。

关于域名和IP地址:Internet上的主机有两种方式表示地址,域名和IP地址,域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样才能和主机建立连接。
  • 域名:www.baidu.com
  • IP 地址:115.239.211.110

端口号:端口号是一个16 位的整数 0~65535。其中,0~1023被预先定义的服务通信占用(如telnet占用端口23,http占用端口80等)。除非我们需要访问这些特定服务,否则,就应该使用 1024~65535 这些端口中的某一个进行通信,以免发生端口冲突。


TCP程序设计:利用套接字(Socket)接口开发网络应用程序被广泛的采用,以至于成为事实上的标准。套接字能执行7种基本操作:

  1. 连接到远程主机
  2. 绑定到端口
  3. 接收从远程机器来的连接请求
  4. 监听到达的数据
  5. 发送数据
  6. 接收数据
  7. 关闭连接

客户端Socket的工作步骤:

  1. 创建 Socket。
  2. 打开连接到 Socket 的输入/出流。使用 getInputStream()方法获得输入流,使用getOutputStream()方法获得输出流。
  3. 按照一定的协议对 Socket  进行读/写操作。
  4. 关闭 Socket。断开客户端到服务器的连接,释放线路 

服务器程序的工作步骤:

  1. 调用ServerSocket(int port) 创建一个服务器端套接字,并绑定到指定端口上
  2. 调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。
  3. 调用Socket类的 getOutputStream 和getInputStream 获取输出流和输入流,开始网络数据的发送和接收。
  4. 最后关闭通信套接字。 

关于UDP:

类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培训、期待与您交流! ----------


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 社保资金被侵吞怎么办? 集体计件手脚慢怎么办 发票当月没用完怎么办 非工业用地怎么办环评 商标注册途中英文错误怎么办 孩子的英文不好怎么办 高盛英文不好怎么办 去美国英文不好怎么办 去越南不会英语怎么办 法斗得了毛囊炎怎么办 头发里有毛囊炎怎么办 笔记本画cad慢怎么办 面试打不出问题怎么办 ai撤销多了怎么办 卖钢材没客户怎么办 手抓饼煎的很硬怎么办 微信朋友圈侵权怎么办 tekla工具栏显示不全怎么办 收银员收到假钱怎么办 世联贷款还不上怎么办 皮肤发黄暗沉怎么办 手机默认竖屏怎么办 手机网络没有了怎么办 新生婴儿不睡觉怎么办 婴儿感冒不睡觉怎么办 小孩不肯吃母乳怎么办 新生儿不会吸奶怎么办 婴儿生病不吃奶怎么办 宝宝积食有痰怎么办 新生儿不肯吸奶怎么办 宝宝不吃妈妈奶怎么办 小孩子晚上咳嗽厉害怎么办 小孩子支气管炎一直咳嗽怎么办 小孩子久咳嗽不好怎么办 羊羔突然不吃奶怎么办 孩子吃奶呛到怎么办 羊产后奶水不足怎么办 奶太急总是呛到怎么办 满月宝宝呛奶怎么办 宝宝吃奶噎到了怎么办 新生婴儿不吃奶怎么办