复习24天(UDP 和 Tcp 协议 编程知识)

今天目标---- 网络编程
1、了解网络概念
2、套接字(socket)编程
3、UDP
4、TCP

网络:
网络模型:
端口:
OS中共有65535个端口
|-- 固定端口(前1024)
|-- 动态端口

IP地址:
作用:
分类:
常见的IP:

子网掩码:
作用:


socket对象
java.net包

TCP:
TCP/IP协议簇中的重要协议
点对点,安全可靠的协议
UDP(User Datagram Protocol):
TCP/IP协议簇中的重要协议,用户数据报协议
特点:无连接、不安全、不可靠的协议,速度快

网络知识普及
Socket编程|套接字编程

TCP|UDP


java.net

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
服务器套接字:

在这里插入图片描述
客户端套接字:

在这里插入图片描述
在这里插入图片描述
socket简介:

⽹络中进程间通信
⾸要解决的问题是如何唯⼀标识⼀个进程,否则通信⽆从谈起!在本地可以通过进程PID来唯⼀标识⼀个进程,但是在⽹络中这是⾏不通的。
其实TCP/IP协议族已经帮我们解决了这个问题,⽹络层的“ip地址”可以唯⼀标识⽹络中的主机,⽽传输层的“协议+端⼝”可以唯⼀标识主机中的应⽤程序(进程)。
这样利⽤ip地址,协议,端⼝ 就可以标识⽹络的进程了,⽹络中的进程通信就可以利⽤这个标志与其它进程进⾏交互。这个就是网络编程,又称为socket编程。

什么是socket:

socket(简称套接字)是进程间通信的⼀种⽅式,它与其他进程间通信的⼀个主要不同是--它能实现不同计算机间的进程间通信,我们⽹络上各种各样的服务⼤多都是基于Socket来完成通信的。
例如我们每天浏览⽹⻚、QQ、微信、收发email等等……

创建socket:

在Java中使⽤java.net包中的类实现socket的创建:

import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;

创建一个基于UDP协议的Socket对象

DatagramSocket ds = new DatagramSocket();

创建一个基于TCP协议的Socket客户端对象

Socket socket = new Socket(“127.0.0.1”, 8080);

创建一个基于TCP协议的Socket服务端对象

ServerSocket ss = new ServerSocket(8080);

创建⼀个tcp socket(TCP套接字):

import java.net.ServerSocket;
import java.net.Socket;

创建一个基于TCP协议的Socket客户端对象

Socket socket = new Socket(“127.0.0.1”, 8080);

创建一个基于TCP协议的Socket服务端对象

ServerSocket ss = new ServerSocket(8080);

创建⼀个tcp socket(UDP套接字)::

import java.net.DatagramSocket;

创建一个基于UDP协议的Socket对象

DatagramSocket ds = new DatagramSocket();

udp⽹络程序-发送数据:

创建⼀个udp客户端程序的流程是简单,具体步骤如下:

1、 创建客户端套接字
2、 发送/接收数据
3、 关闭套接字

在这里插入图片描述
实验代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TestUDPSendData {

public static void main(String[] args) {
	DatagramSocket ds = null;
	try {
		ds = new DatagramSocket(8888);
		String str = "刘帅哥你很棒~~~";
		DatagramPacket dp = new DatagramPacket(str.getBytes("gbk"), str.getBytes("gbk").length, 
				new InetSocketAddress("192.168.31.23", 8080));
		
		ds.send(dp);
	} catch (SocketException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (ds != null) ds.close();
	}
	
	
}

}

在这里插入图片描述

udp⽹络程序-接受数据:

-不绑定IP地址和端口

接受数据存在两种情况,第一种就是我们默认不绑定IP地址和端口,有python解释器自动的为我们动态的分配:

import java.io.IOException;
import java.net.DatagramPacket;

import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TestUDPSendData {

public static void main(String[] args) {
	DatagramSocket ds = null;
	try {
		ds = new DatagramSocket();
		String str = "刘帅哥你很棒~~~";
		DatagramPacket dp = new DatagramPacket(str.getBytes("gbk"), str.getBytes("gbk").length, 
				new InetSocketAddress("192.168.31.23", 8080));
		
		ds.send(dp);
		
	} catch (SocketException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (ds != null) ds.close();
	}
	
	
}

}

在这里插入图片描述

绑定IP地址和端口:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TestUDPSendData {

public static void main(String[] args) {
	DatagramSocket ds = null;
	try {
		ds = new DatagramSocket(new InetSocketAddress("192.168.31.23", 2233));
		String str = "刘帅哥你很棒~~~";
		DatagramPacket dp = new DatagramPacket(str.getBytes("gbk"), str.getBytes("gbk").length, 
				new InetSocketAddress("192.168.31.23", 8080));
		
		ds.send(dp);
		
	} catch (SocketException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (ds != null) ds.close();
	}
	
	
}

}

在这里插入图片描述
udp⽹络通信过程:

在这里插入图片描述
Tcp:
tcp通信模型:

在这里插入图片描述
在这里插入图片描述
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTcp {
public static void main(String[] args) {
ServerSocket ss = null;
PrintWriter out = null;
try {
ss = new ServerSocket(8888);
System.out.println(“等待客户端连接上来……”);
while(true) {
Socket socket = ss.accept();

			System.out.println(socket.getInetAddress().getHostAddress() +"连接上来了");
			// 注意PrintWriter第二个参数,必须为true,否则会缓冲数据,导致数据无法发送
			out = new PrintWriter(socket.getOutputStream(), true);
			out.println("欢迎访问本系统");
			
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
	
	
}

}

控制台处于等待连接状态,等待客户端连接。
我们使用网络助手完成一次连接:

在这里插入图片描述
Tcp客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

public static void main(String[] args) {
	Socket s = null;
	BufferedReader br = null;
	
	try {
		s = new Socket("192.168.31.23", 8888);

// s = new Socket(“127.0.0.1”, 8888);

		br = new BufferedReader(new InputStreamReader(s.getInputStream()));
		System.out.println(br.readLine());
		
	} catch (UnknownHostException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
	
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值