黑马程序员_ 网络编程

发布时间:2016-12-11 14:08:50 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"黑马程序员_ 网络编程",主要涉及到黑马程序员_ 网络编程方面的内容,对于黑马程序员_ 网络编程感兴趣的同学可以参考一下。

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 1.概述 (1)网络模型:OSI;TCP/IP (2)网络通讯要素:IP地址;端口号;传输协议 2.通讯过程: 找到对方IP; 数据发送到对方知道的应用程序上。每个程序都用数字进行标识,这些数字,称为端口。逻辑端口; 定义协议(通讯规则),国际通用协议TCP/IP。 3.网络参考模型 http,ftp是应用层协议。 4.IP地址 网络中设备的标识。主机回环地址:127.0.0.1 主机名:localhost。 www.baidu.com:www是万维网组织,baidu是主机名,com是区分主机的用途(商业用途)。 5.端口号 用于标识进程的逻辑地址,不同进程的标识; 有效端口:0-65535,其中0-1024由系统使用或是保留端口。 6.传输协议 通讯的规则。常见的协议:TCP,UDP。 (1)UDP: 将数据及源和目的封装到数据包中,不需要建立连接; 每个数据包的大小限制在64k内; 因无连接,是不可靠协议; 速度快; (2)TCP: 建立连接,形成传输数据的通道; 在连接中进行大数据量传输; 通过三次握手完成连接,是可靠协议; 效率稍低。 7. InetAddress类 public class InetAddress extends Object implements Serializable 此类表示互联网协议 (IP) 地址。 IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。 (1)方法: static InetAddress  getLocalHost()返回本地主机。 String  getHostAddress() 返回 IP 地址字符串(以文本表现形式)。 String  getHostName() 获取此 IP 地址的主机名。如果没解析出name,那么name还是IP地址。 static InetAddress  getByName(Stringhost) 在给定主机名的情况下确定主机的 IP 地址。 static InetAddress[]  getAllByName(Stringhost) 在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。如:百度有好多主机,有好多IP地址,返回的是数组。 8.Socket Socket是为网络服务提供的一种机制; 通信的两端都有Socket; 网络通信就是Socket间的通信; 数据在两个Socket间通过IO传输。 9.UDP传输 DatagramSocket  DatagramPacket 建立发送端,接收端; 建立数据包; 调用Socket的发送接收方法; 关闭Socket。 发送端和接收端是两个独立的运行程序。 (1)DatagramSocket public class DatagramSocket extends Object 此类表示用来发送和接收数据报包的套接字。 数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。 方法: DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 void  receive(DatagramPacket p) 从此套接字接收数据报包。 void  send(DatagramPacket p) 从此套接字发送数据报包。 (2)DatagramPacket public final class DatagramPacket extends Object 此类表示数据报包。 数据报包用来实现无连接包投递服务。不对包投递做出保证。 方法: DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。 DatagramPacket(byte[] buf, int length, InetAddress address,int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 byte[] getData() 返回数据缓冲区。  int getLength() 返回将要发送或接收到的数据的长度。 int getPort() 返回某台远程主机的端口号 (3)UDP发送数据的思路 建立UDPSocket服务; 提供数据,将数据封装到数据包中; 通过Socket服务的发送功能,将数据包发出去; 关闭资源。 (4)UDP接收数据的思路 定义UDPSocket服务,通常监听一个端口,给接收数据的网络应用程序定义一个数字标识; 定义一个数据包,存储接收到的字节数据; 通过DatagramSocket的receive方法将接收到的数据存入已定义好的数据包中; 通过数据包对象的特有功能,将这些数据取出,打印在控制台上; 关闭资源。 IP 192.168.0.255是一个广播地址。 import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; public Send(DatagramSocket ds) { this.ds=ds; } public void run() { try { BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); String line=null; while((line=bufr.readLine())!=null) { byte[] buf=line.getBytes(); DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10010); ds.send(dp); if("886".equals(line)) { break; } } } catch (Exception e) { throw new RuntimeException("发送端失败"); } } } class Rece implements Runnable { private DatagramSocket ds; public Rece(DatagramSocket ds) { this.ds=ds; } public void run() { try { while(true) { byte[] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,buf.length); ds.receive(dp); String ip=dp.getAddress().getHostAddress(); String data=new String(dp.getData(),0,dp.getLength()); if("886".equals(data)) { System.out.println(ip+"......离开聊天室"); break; } System.out.println(ip+"::"+data); } } catch (Exception e) { throw new RuntimeException("接收端失败"); } } } class ChatDemo2 { public static void main(String[] args) { DatagramSocket sendSocket=new DatagramSocket(); DatagramSocket receSocket=new DatagramSocket(); new Thread(new Send(sendSocket)).start(); new Thread(new Rece(receSocket)).start(); } } 10.TCP传输 Socket  ServerSocket 建立客户端和服务器端; 建立连接,通过Socket中的IO流进行数据传输; 关闭Socket。 客户端和服务端是两个独立的应用程序。 (1)Socket:客户端 public class Socket extends Object 此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。 方法: Socket() Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 void connect(SocketAddress endpoint) 将此套接字连接到服务器。 InputStream  getInputStream() 返回此套接字的输入流。 OutputStream  getOutputStream() 返回此套接字的输出流。 void  shutdownInput() 此套接字的输入流置于“流的末尾”。 void  shutdownOutput() 禁用此套接字的输出流。关闭输出流。 (2)ServerSocket:服务器端 public class ServerSocket extends Object 此类实现服务器套接字。服务器套接字等待请求通过网络传入。 方法: ServerSocket(int port) 创建绑定到特定端口的服务器套接字。 ServerSocket(int port, int backlog) 利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。backlog是能同时连接到服务端的客户端最大个数。 Socket accept() 侦听并接受到此套接字的连接。 InetAddress  getInetAddress() 返回此服务器套接字的本地地址。 (3)客户端操作 步骤: 建立Socket服务,指定要连接的主机和端口; 获取Socket流中的输出流,将数据写到该流中,通过网络发送给服务端; 获取Socket流中的输入流,将服务器反馈的数据获取到,并打印; 关闭客户端资源。 (4)服务器端操作 步骤: 建立服务端的Socket服务,ServerSocket(),并监听一个端口; 获取连接过来的客户端对象,通过ServerSocket的accept方法,没有就会等,是阻塞式的; 客户端如果发过来数据,服务端要使用对应的客户端对象,获取该客户端对象的读取流来读取发过来的数据并打印到控制台; 关闭服务端(可选)。 import java.io.*; import java.net.*; class TcpClient2 { public static void main(String[] args)throws Exception { Socket s = new Socket("192.168.1.254",10004); OutputStream out = s.getOutputStream(); out.write("服务端,你好".getBytes()); InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); s.close(); } } class TcpServer2 { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10004); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"....connected"); InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); OutputStream out = s.getOutputStream(); Thread.sleep(10000); out.write("哥们收到,你也好".getBytes()); s.close(); ss.close(); } } 11.URL public final class URL extends Object implements Serializable 类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。 方法: String  getFile() 获取此 URL 的文件名。 String  getHost() 获取此 URL 的主机名(如果适用)。 String  getPath() 获取此 URL 的路径部分。 int  getPort() 获取此 URL 的端口号。 String  getProtocol() 获取此 URL 的协议名称。 String  getQuery() 获取此 URL 的查询部分。 URLConnection  openConnection() 返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。 import java.net.*; class URLDemo { public static void main(String[] args) throws MalformedURLException { URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30"); System.out.println("getProtocol() :"+url.getProtocol()); System.out.println("getHost() :"+url.getHost()); System.out.println("getPort() :"+url.getPort()); System.out.println("getPath() :"+url.getPath()); System.out.println("getFile() :"+url.getFile()); System.out.println("getQuery() :"+url.getQuery()); /*int port = getPort(); if(port==-1) port = 80; getPort()==-1 */ } } 12. URLConnection public abstract class URLConnection extends Object 抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。 方法: InputStream  getInputStream() 返回从此打开的连接读取的输入流。 import java.net.*; import java.io.*; class URLConnectionDemo { public static void main(String[] args) throws Exception { URL url = new URL("http://192.168.1.254:8080/myweb/demo.html"); URLConnection conn = url.openConnection(); System.out.println(conn); InputStream in = conn.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); System.out.println(new String(buf,0,len)); } }13. SocketAddress public abstract class SocketAddress extends Object implements Serializable 此类表示不带任何协议附件的 Socket Address。作为一个抽象类,应通过特定的、协议相关的实现为其创建子类。 Socket类中void connect(SocketAddress endpoint)用到了SocketAddress InetAddress表示IP地址;SocketAddress表示IP地址加端口号。 14. InetSocketAddress public class InetSocketAddress extends SocketAddress 此类实现 IP 套接字地址(IP 地址 + 端口号)。 ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net

上一篇:07-s:if 标签判断Action中的字段是否为null或者空字符串的方法
下一篇:(二十六)网络

相关文章

相关评论