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 {
InetAddress inetAddress1=InetAddress.getByName("127.0.0.1");
System.out.println(inetAddress1);
InetAddress inetAddress2=InetAddress.getByName("www.csdn.net");
System.out.println(inetAddress2);
InetAddress inetAddress3=InetAddress.getLocalHost();
System.out.println(inetAddress3);
System.out.println(inetAddress2.getHostAddress());
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
三次握手 四次挥手,面向连接相对稳定,
客户端
服务器
- 建立服务端口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=new Socket(sAddress,port);
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 {
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();
}
}