黑马程序员——Java基础--------网络编程
2015-10-12 16:41
1021 查看
-------android培训、java培训、期待与您交流! ----------
网络编程
网络模型:OSI参考模型和TCP/IP参考模型
JDK对网络的包都在net包中
网络通讯三要素:IP地址,端口号,传输协议
IP地址网络中设备的表示:
IP地址范围:
A 类:1.x.y.z~126.x.y.z
B 类:128.x.y.z~191.x.y.z
C 类:192.x.y.z~223.x.y.z
D 类:224.x.y.z~239.x.y.z
x,y,z最大取到255
其中127.0.0.1是本地主机地址
获取ip地址
InetAddress.getLocalHost()来获取本地主机ip地址对象
InetAddress.getAllByName(host);获取主机所有地址,返回一个InetAddress数组
String getHostAddress()获取主机地址
String getHostName()获取主机名
端口号:
用于标识进程的逻辑地址,不同进程的标识
有效端口0到65535,其中0到1024是保留端口
传输协议:
常见的协议:UDP,TCP
UDP:将数据及源和目的封装在数据包中,不需要建立连接,每个数据包大小应该限制在64K内
优点:不需要建立连接,速度快
缺点:因为无连接,所以是不可靠协议
TCP:建立连接,形成传输通道,在连接中进行大量数据传输
优点:通过三次握手完成连接,所以说可靠协议
缺点: 必须建立连接,效率会稍低
Socket:是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输
UDP传输中用到的类:
DatagramSocket数据发送端和数据接收端
构造方法:
DatagramSocket():不绑定任何可用接口
DatagramSocket(int port):绑定一个可用接口
一般方法:
send(DatagramPacket D):发送数据包
receive(DatagramPacket D):接收数据包
close():关闭
DatagramPacket数据包
构造方法:
DatagramPacket(byte[] buf, int length):用来接收长度为 length 的数据包
DatagramPacket(byte[] buf, int length, InetAddress address, int port):用来将长度为 length 的包发送到指定主机上的指定端口号。
一般方法:
int getPort():获取某台远程主机的端口号
byte[] getData() :返回数据缓冲区
InetAddress getAddress():返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的
UDP传输步骤:
建立发送端,接收端。
建立数据包。
调用Socket的发送接收方法。
关闭Socket。
创建UDP发送端思路:
1,建立udp的socket服务。
2,将要发送的数据封装到数据包中。
3,通过udp的socket服务将数据包发送出去。
4,关闭socket服务。
建立UDP接收端的思路。
1,建立udp socket服务,因为是要接收数据,必须要明确一个端口号。
2,创建数据包,用于存储接收到的数据。方便用数据包对
4000
象的方法解析这些数据.
3,使用socket服务的receive方法将接收的数据存储到数据包中。
4,通过数据包的方法解析数据包中的数据。
5,关闭资源
TCP传输用到的类
Socket发送端
构造方法:
Socket():不带参数,要使用connect(SocketAddress endpoint)方法将此套接字连接到服务器
Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
ServerSocket服务端
构造方法:
ServerSocket(int port):创建绑定到特定端口的服务器套接字。
TCP传输步骤:
建立客户端和服务器端,建立连接后,通过Socket中的IO流进行数据的传输,关闭socket
客户端发数据到服务端步骤:
1,创建tcp客户端socket服务。使用的是Socket对象。建议该对象一创建就明确目的地。要连接的主机。 (如果用空参的构造函数要用connect方法来进行连接)
2,如果连接建立成功,说明数据传输通道已建立。该通道就是socket流 (网络IO流),是底层建立好的。 既然是流,说明这里既有输入,又有输出。想要输入或者输出流对象,可以找Socket来获取。 可以通过getOutputStream(),和getInputStream()来获取两个字节流。
3,使用输出流,将数据写出。
4,关闭资源。
建立tcp服务端的思路:
1,创建服务端socket服务。通过ServerSocket对象。
2,服务端必须对外提供一个端口,否则客户端无法连接。
3,获取连接过来的客户端对象。
4,通过客户端对象获取socket流读取客户端发来的数据 ,并打印在控制台上。
5,关闭资源。关客户端,关服务端。 注:一般服务端是不关闭的,因为服务端会本很多人应用
网络编程
网络模型:OSI参考模型和TCP/IP参考模型
JDK对网络的包都在net包中
网络通讯三要素:IP地址,端口号,传输协议
IP地址网络中设备的表示:
IP地址范围:
A 类:1.x.y.z~126.x.y.z
B 类:128.x.y.z~191.x.y.z
C 类:192.x.y.z~223.x.y.z
D 类:224.x.y.z~239.x.y.z
x,y,z最大取到255
其中127.0.0.1是本地主机地址
获取ip地址
InetAddress.getLocalHost()来获取本地主机ip地址对象
InetAddress.getAllByName(host);获取主机所有地址,返回一个InetAddress数组
String getHostAddress()获取主机地址
String getHostName()获取主机名
import java.net.InetAddress; import java.net.UnknownHostException; public class IPDemo { public static void main(String[] args) throws UnknownHostException { //获取本地主机ip地址对象。 InetAddress ip = InetAddress.getLocalHost(); //获取其他主机的ip地址对象。 ip = InetAddress.getByName("193.16.3.5");//InetAddress.getByName("my_think"); System.out.println(ip.getHostAddress());//获取主机地址 System.out.println(ip.getHostName());//获取主机名 } }
端口号:
用于标识进程的逻辑地址,不同进程的标识
有效端口0到65535,其中0到1024是保留端口
传输协议:
常见的协议:UDP,TCP
UDP:将数据及源和目的封装在数据包中,不需要建立连接,每个数据包大小应该限制在64K内
优点:不需要建立连接,速度快
缺点:因为无连接,所以是不可靠协议
TCP:建立连接,形成传输通道,在连接中进行大量数据传输
优点:通过三次握手完成连接,所以说可靠协议
缺点: 必须建立连接,效率会稍低
Socket:是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输
UDP传输中用到的类:
DatagramSocket数据发送端和数据接收端
构造方法:
DatagramSocket():不绑定任何可用接口
DatagramSocket(int port):绑定一个可用接口
一般方法:
send(DatagramPacket D):发送数据包
receive(DatagramPacket D):接收数据包
close():关闭
DatagramPacket数据包
构造方法:
DatagramPacket(byte[] buf, int length):用来接收长度为 length 的数据包
DatagramPacket(byte[] buf, int length, InetAddress address, int port):用来将长度为 length 的包发送到指定主机上的指定端口号。
一般方法:
int getPort():获取某台远程主机的端口号
byte[] getData() :返回数据缓冲区
InetAddress getAddress():返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的
UDP传输步骤:
建立发送端,接收端。
建立数据包。
调用Socket的发送接收方法。
关闭Socket。
创建UDP发送端思路:
1,建立udp的socket服务。
2,将要发送的数据封装到数据包中。
3,通过udp的socket服务将数据包发送出去。
4,关闭socket服务。
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPSendDemo { public static void main(String[] args) throws IOException { System.out.println("发送端启动......"); //1,udpsocket服务。使用DatagramSocket对象。 DatagramSocket ds = new DatagramSocket(8888); //2,将要发送的数据封装到数据包中。 String str = "udp传输演示:发送过来了!"; //使用DatagramPacket将数据封装到的该对象包中。 byte[] buf = str.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.110"),10000);//发送给10000的端口号 //3,通过udp的socket服务将数据包发送出去。使用send方法。 ds.send(dp); //4,关闭资源。 ds.close(); } }
建立UDP接收端的思路。
1,建立udp socket服务,因为是要接收数据,必须要明确一个端口号。
2,创建数据包,用于存储接收到的数据。方便用数据包对
4000
象的方法解析这些数据.
3,使用socket服务的receive方法将接收的数据存储到数据包中。
4,通过数据包的方法解析数据包中的数据。
5,关闭资源
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceDemo { public static void main(String[] args) throws IOException { System.out.println("接收端启动......"); //1,建立udp socket服务。 DatagramSocket ds = new DatagramSocket(10000); //2,创建数据包。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //3,使用接收方法将数据存储到数据包中。 ds.receive(dp);//阻塞式的。 //4,通过数据包对象的方法,解析其中的数据,比如,地址,端口,数据内容。 String ip = dp.getAddress().getHostAddress(); int port = dp.getPort();//发送端的端口 String text = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+":"+port+":"+text); //5,关闭资源。 ds.close(); } }
TCP传输用到的类
Socket发送端
构造方法:
Socket():不带参数,要使用connect(SocketAddress endpoint)方法将此套接字连接到服务器
Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
ServerSocket服务端
构造方法:
ServerSocket(int port):创建绑定到特定端口的服务器套接字。
TCP传输步骤:
建立客户端和服务器端,建立连接后,通过Socket中的IO流进行数据的传输,关闭socket
客户端发数据到服务端步骤:
1,创建tcp客户端socket服务。使用的是Socket对象。建议该对象一创建就明确目的地。要连接的主机。 (如果用空参的构造函数要用connect方法来进行连接)
2,如果连接建立成功,说明数据传输通道已建立。该通道就是socket流 (网络IO流),是底层建立好的。 既然是流,说明这里既有输入,又有输出。想要输入或者输出流对象,可以找Socket来获取。 可以通过getOutputStream(),和getInputStream()来获取两个字节流。
3,使用输出流,将数据写出。
4,关闭资源。
import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.net.UnknownHostException; public class ClientDemo { public static void main(String[] args) throws IOException { //创建客户端socket服务。 Socket socket = new Socket("192.168.1.100",10002); SocketAddress isa=new InetSocketAddress(InetAddress.getByName("192.6"),10000); socket.connect(isa); //获取socket流中的输出流。 OutputStream out = socket.getOutputStream(); //使用输出流将指定的数据写出去。 out.write("tcp演示:哥们又来了!".getBytes());//写socket里去了 //关闭资源。 socket.close(); } }
建立tcp服务端的思路:
1,创建服务端socket服务。通过ServerSocket对象。
2,服务端必须对外提供一个端口,否则客户端无法连接。
3,获取连接过来的客户端对象。
4,通过客户端对象获取socket流读取客户端发来的数据 ,并打印在控制台上。
5,关闭资源。关客户端,关服务端。 注:一般服务端是不关闭的,因为服务端会本很多人应用
import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { public static void main(String[] args) throws IOException { //1创建服务端对象。 ServerSocket ss = new ServerSocket(10002); //2,获取连接过来的客户端对象。 Socket s = ss.accept();//阻塞式. String ip = s.getInetAddress().getHostAddress();//获取ip地址 //3,通过socket对象获取输入流,要读取客户端发来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf,0,len); System.out.println(ip+":"+text); s.close(); ss.close(); } }
相关文章推荐
- Linux基础(三)TCP链接数量
- 5G移动网络 V2X
- 判断当前网络是否可用
- deeplearning系列(五)实现一个简单的深度神经网络
- 网络编程 笔记(二) 基于 Windows简单通信
- Android 项目(详解二)—— 网络连接(2)
- 保存一下,回去再看,关于TCP连接的分析的一篇文章
- Android 项目实践(二)——网络连接
- TCP/IP TIME_WAIT状态原理(转)
- HttpURLConnection详解
- 计算机网络(三)HTTP协议相关基础
- iOS开发网络数据之AFNetworking使用
- Cocos发育Visual Studio下一个HttpClient开发环境设置
- 使用nginx当做http的负载均衡
- IOS 9 同时兼容http以及https请求
- HDU 4280 Island Transport 网络流
- TCP/IP协议三次握手与四次握手流程解析
- HttpClient Cookies设置
- 基于netty TCP server server主动给client 发消息解决方案
- Android 项目(一):网络请求封装(一)