网络编程概述
A.计算机网络:
是指将地理位置不同点的具有独立功能及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件以及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
B.网络编程:
就是用来实现网络互连得不同计算机上运行的程序间可以进行数据交换。
网络编程三要素
每个设备在网络张红的唯一标识每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。
ipconfig:查看本机ip:192.168.12.42
ping:测试连接192.168.40.62
本地回路地址:127.0.0.1
255.255.255.255是广播地址
IPV4:4个字节组成,4个0-255。大概42亿,30亿在北美,亚洲4亿。2011年初用尽
IPV6:8组,每组4个16进制数。
网络编程三要素之端口号概述
1.每个程序在设备上的唯一的标识
2.每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到那台机器上,还需要明确发到哪个程序
3.端口号范围从0-655354.编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024一下的基本上都被系统程序占用了。
常用端口:
mysql:3306
oracle:1521
web:80
tomcat:8080
feiq:2425
网络编程三要素之协议
为计算机网络中进行数据交换而建立的规则,标准或约定的集合。
UDP
面向无连接,数据不安全,速度快,不区分客户端与服务端
TCP
面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
三次握手:客户端先向服务端发起请求,服务端响应请求,传输数据。
socket概述
网络上具有唯一标识的ip地址和端口号组合在一起才能构成唯一识别的标识符套接字。 1.通信的两端都有Socket
2. 网络通信其实就是Socket间的通信 ,数据在两个Socket间通过IO流传输
3. Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。
UDP传输
1.发送Send
创建DATagramSocket,随机端口号
创建DATagramPacket,指定数据,长度,地址,端口
使用DATagramSocket发送DATagramPacket
关闭DATagramSocket
2.接受Receive
创建DatagramSocket,指定端口号
创建DATagramPacket,指定数组,长度
使用datagramSocket接收DATagramPacket
关闭DatagramSocket
从DatagramPacket中获取数据
3.接受方获取ip和端口号
String ip=packet.getAddress().getHostAddress();
int port = packet.getPost();
实例
接收方
/**
*
* 接受Receive
创建DatagramSocket,指定端口号
创建DATagramPacket,指定数组,长度
使用datagramSocket接受DATagramPacket
关闭DatagramSocket
从DatagramPacket中获取数据
*
*/
public class SocketReceive {
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(6666);
DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
try {
ds.receive(dp);
byte[] arr=dp.getData();
int len=dp.getLength();
System.out.println(new String(arr,0,len));
ds.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}
发送方
/**
*
* 发送Send
创建DATagramSocket,随机端口号
创建DATagramPacket,指定数据,长度,地址,端口
使用DATagramSocket发送DATagramPacket
关闭DATagramSocket
*
*/
public class SocketSend {
public static void main(String[] args) {
try {
String data="你好";
DatagramSocket ds=new DatagramSocket();
try {
DatagramPacket dp=new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
try {
ds.send(dp);
ds.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}
启动测试
为了方便观察,我们用命令启动项目。
首先找到我们项目所在的位置
然后右键打开命令窗口。首先启动接受方,再启动发送方。如果先启动发送方,这时候发送的消息没有接收方,就会造成数据的丢失。
发现接收方接收到数据,说明我们测试成功!