计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,
通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,
实现资源共享和信息传递的计算机系统.
目的是什么
传播交流信息,数据交换,通信
需要什么
IP和端口号
网络通讯协议
IP地址
ip地址:InetAddress
唯一定位一台网络上的计算机
IP地址的分类:
ipv4 / ipv6
IPV4 127.0.0.1,四个字节组成,0~255,分布不均匀
IPV6 2001: 0bb2: aaaa: 0012: 1231: ffff,128位,8个无符号整数
公网(互联网)-私网(局域网)
使用:
没有构造器,只能通过静态方法返回值
定义一个InetAddress对象,等于一个IP地址.
端口
端口用来区分软件.0~65535,不同的进程有不同的端口号.
协议分为TCP与UDP,单个协议下,端口号不能冲突
端口分为公有端口0~1023,程序注册端口2014~49151,动态与私有端口
通信协议
元素:速率,传输码率,代码结构,传输控制
TCP/IP协议簇(实际上是一组协议)
TCP用户传输协议
(打电话,连接稳定,三次握手,四次挥手)
(传输完成,释放连接,效率低)
UDP用户数据报协议
(发短信,不连接,不稳定)
(无论对方如何,都发过去)
TCP(客户端与服务端)
服务端创建服务,然后接受传过来的socket
public class server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(9999);//建立服务
Socket socket = serverSocket.accept();//可以认为是传过来的socket
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端创建连接
public class client {
public static void main(String[] args) {
try {
InetAddress ia = InetAddress.getByName("127.0.0.1");
int port = 9999;
Socket socket = new Socket(ia,port);//连接服务器
} catch (Exception e) {
e.printStackTrace();
}
}
}
TCP实现聊天
服务端
public class server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(9999);//创建服务
Socket socket = serverSocket.accept();//可以认为是传过来的socket
//以下为IO流操作
InputStream is = socket.getInputStream();
//byte[] buffer = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while((len=is.read(buffer))!=-1){
baos.write(buffer,0,len);//继续把2进制文件写到baos流中
}
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
public class client {
public static void main(String[] args) {
try {
InetAddress ia = InetAddress.getByName("127.0.0.1");
int port = 9999;
Socket socket = new Socket(ia,port);//连接服务
//以下为IO流操作
OutputStream os = socket.getOutputStream();//指定对象
os.write("HelloWorld".getBytes(StandardCharsets.UTF_8));//写入信息
} catch (Exception e) {
e.printStackTrace();
}
}
}
UDP
不需要连接服务器
客户端发包
public class UdpClient {
public static void main(String[] args) throws Exception{
//建立一个Socket
DatagramSocket socket =new DatagramSocket();
//建立一个包
String msg = "你好";
InetAddress ia = InetAddress.getByName("127.0.0.1");
int port = 9090;
DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,ia,port);
//发送包
socket.send(packet);
}
}
服务端接包
public class UdpServer {
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);
socket.close();
}
}



