IP
- ip地址:
- 在计算机网络中,唯一确定一台计算机
- 127.0.0.1:本机回环地址
- ip地址的分类(IPV4)
- 分为A类、B类、C类地址,其区别在于A、B、C类子网的个数和所包含的地址个数不同。
- 局域网网段10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.168.0.0~192.168.255.255不会在公网中出现
- 以及一些预留地址
- 在对应子网中,第一个ip地址表示整个子网的地址,最后一个ip是这个子网的广播地址
//测试
public class Test1 {
public static void main(String[] args) throws UnknownHostException {
//使用ip
InetAddress inetAddress1=InetAddress.getByName("127.0.0.1");
System.out.println(inetAddress1);
//使用域名
InetAddress inetAddress2=InetAddress.getByName("www.csdn.net");
System.out.println(inetAddress2);
//LocalHost获取本机回环ip(127.0.0.1)
InetAddress inetAddress3=InetAddress.getLocalHost();
System.out.println(inetAddress3);
//System.out.println(inetAddress2.getAddress());
//System.out.println(inetAddress2.getCanonicalHostName());
System.out.println(inetAddress2.getHostAddress());//ip
System.out.println(inetAddress2.getHostName());//域名
}
}
- 端口
- 不同进程监听不同的端口
- UDP和TCP协议端口号独立,可以同时有UDP和TCP的80端口
- 端口号0~65535
- 其中1023以内端口为约定端口 比如80端口为http服务
- 1024~49151,分配用户或者应用程序
- 剩下是动态、私有端口
netstat -ano #查看所有端口
netstat -ano|findstr "XXXXX" #查看指定的端口
tasklist|findstr "XXXX" #查看指定端口发进程
网络通信协议
- 各个端间通信的标准,使得接收方和发送方对数据没有歧义,同时规定端间数据传输的速率、包/帧结构、实现传输控制等。
- 主要:TCP/IP协议簇
- TCP
- 三次握手 四次挥手,面向连接相对稳定,
- 客户端
- 连接服务器Socket
- 发送消息
- 服务器
- 建立服务端口ServerSocket
- 等待用户的连接accept
- 接受用户的消息
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
//客户
public class Test3 {
public static void main(String[] args) throws IOException {
//要知道服务器地址
InetAddress sAddress=InetAddress.getByName("127.0.0.1");
//端口号
int port=9999;
//创建socket连接
Socket socket=new Socket(sAddress,port);
//发送消息,IO流
OutputStream stream=socket.getOutputStream();
stream.write("hello".getBytes());
//关闭资源
stream.close();
socket.close();
}
}
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服务
public class Test4 {
public static void main(String[] args) throws IOException {
//需要有一个地址
ServerSocket serverSocket=new ServerSocket(9999);
//等待客户端连接
Socket socket=serverSocket.accept();
//读取消息
InputStream is=socket.getInputStream();
//管道流
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] buffer =new byte[1024];
int len;
while ((len=is.read(buffer))!=-1){
baos.write(buffer,0,len);
}
System.out.println(baos.toString());
baos.close();
is.close();
socket.close();
serverSocket.close();
}
}
- UDP
- 不用建立连接,但是需要地址
import java.net.*;
//不需要连接服务器
public class Test5 {
public static void main(String[] args) throws Exception {
//建立Socket
DatagramSocket socket=new DatagramSocket();
//打包数据包
String msg="hello";
new DatagramPacket(msg.getBytes(),0,msg.getBytes().length);
//发送
InetAddress address=InetAddress.getByName("127.0.0.1");
int post=9090;
DatagramPacket packet=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,address,post);
socket.send(packet);
socket.close();
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//服务器端,等待客户端的数据包
public class Test6 {
public static void main(String[] args) throws Exception {
//开放端口
DatagramSocket socket=new DatagramSocket(9090);
//接受数据包
byte[] buffer=new byte[1024];
DatagramPacket packet=new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);//阻塞接受
System.out.println(new String(packet.getData()));
//关闭连接
socket.close();
}
}
版权声明:本文为qq_38425976原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。