JAVA基础----网络编程
来源:互联网 发布:人生真相知乎 编辑:程序博客网 时间:2024/04/29 23:55
网络编程: Socket编程
网络编程的三个要素:
传输协议:
UDP协议:
面向无连接的协议,速度快,不安全
TCP协议:
面向有连接的协议,速度稍慢,安全,会进行三次握手操作
使用UDP进行数据的传输:
2: 把要发送的数据 ,封装成 数据报包 使用DatagramPacket对象完成
3: 发送数据报包, send(dp)方法
2; 创建空的数据报包, 用来存储接收到的数据
3: 接收数据,把数据存储到空的数据报包中
4: 解析数据报包中的数据
获取IP地址 getAddress();
获取数据: getData();
获取数据的长度: getLength();
5: 关闭Socket流,使用close()方法
使用TCP进行数据的传输:
客户端;
1: 创建客户端的Socket对象
2: 准备要发送的数据
3: 通过Socket对象中的输出流,完成数据的发送
4: 告知服务器 ,数据已发送完毕, shutdownOutput()
5: 获取服务器的反馈信息
6; 关闭Socket流
服务器端:
1: 创建服务器端ServerSocket对象
2: 等待客户端的连接
String ip = s.getInetAddress().getHostAddress();
b: 获取数据
1): 获取客户端的输入流对象
2): 通过输入流对象, 读取流中的数据
3): 把数据进行处理(打印,存储到文件中)
c: 编写客户端反馈信息
1): 获取客户端的输出流对象
2): 写 给客户端的反馈信息
d: 关闭客户端Socket流
网络编程的三个要素:
IP地址:
IP地址的分类:
A: 1.0.0.1 -- 127.255.255.25410.x.x.x 是私有地址
B类128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类192.0.0.1---223.255.255.254 192.168.X.X是私有地址
D类224.0.0.1---239.255.255.254
端口号:
传输协议:
UDP协议:
面向无连接的协议,速度快,不安全
用来视频聊天,语音聊天
TCP协议:
面向有连接的协议,速度稍慢,安全,会进行三次握手操作
数据的传输
使用UDP进行数据的传输:
发送端:
2: 把要发送的数据 ,封装成 数据报包 使用DatagramPacket对象完成
3: 发送数据报包, send(dp)方法
4: 关闭Socket流, 使用close()方法
public static void main(String[] args) {System.out.println("启动发送端");DatagramSocket ds = null;try {<span style="white-space:pre"></span>//<span style="font-size:24px;">创建UDP协议的发送端DatagramSocket对象</span>ds = new DatagramSocket();//<span style="font-size:24px;">把要发送的数据 ,封装成 数据报包 使用DatagramPacket对象完成</span>
<span style="font-size:24px;"><span style="white-space:pre"></span>byte[] by = "我来了。。。。。。。".getBytes();</span>
<span style="font-size:24px;">InetAddress ia = InetAddress.getByName("127.0.0.1");</span>
<span style="font-size:24px;"><span style="white-space:pre"></span>//<span style="font-size:24px;"> 发送数据报包, send(dp)方法</span>ds.send(new DatagramPacket(by, by.length, ia, 10000));} catch (SocketException e) {System.out.println("端口无法应用");return;} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {<span style="white-space:pre"></span>//<span style="font-size:24px;"> 关闭Socket流, 使用close()方法</span>ds.close();}}</span>
接收端:
2; 创建空的数据报包, 用来存储接收到的数据
3: 接收数据,把数据存储到空的数据报包中
4: 解析数据报包中的数据
获取IP地址 getAddress();
获取数据: getData();
获取数据的长度: getLength();
5: 关闭Socket流,使用close()方法
public static void main(String[] args) {DatagramSocket ds = null;try {
<span style="white-space:pre"></span>//<span style="font-size:24px;">创建UDP协议的接收端DatagramSocket对象</span>ds = new DatagramSocket(10000);
byte[] by = new byte[1024];
<span style="white-space:pre"></span>//<span style="font-size:24px;"> 创建空的数据报包, 用来存储接收到的数据</span>
DatagramPacket dp = new DatagramPacket(by, by.length);
<span style="white-space:pre"></span>//<span style="font-size:24px;">接收数据,把数据存储到空的数据报包中</span>ds.receive(dp);<span style="white-space:pre"></span>
<span style="white-space:pre"></span>//<span style="font-size:24px;">解析数据报包中的数据 <span style="font-size:24px;">获取IP地址 getAddress();</span></span>InetAddress ia = dp.getAddress();
<span style="white-space:pre"></span>//<span style="font-size:24px;">获取数据: getData();</span>System.out.println(ia.getHostAddress());
<span style="white-space:pre"></span>//<span style="font-size:24px;">获取数据的长度: getLength();</span>int in = dp.getLength();
String str = new String(by, 0, in);
System.out.println(str);} catch (Exception e) {} finally {
<span style="white-space:pre"></span>//<span style="font-size:24px;">关闭Socket流,使用close()方法</span>ds.close();}}
使用TCP进行数据的传输:
客户端;
1: 创建客户端的Socket对象
2: 准备要发送的数据
3: 通过Socket对象中的输出流,完成数据的发送
4: 告知服务器 ,数据已发送完毕, shutdownOutput()
5: 获取服务器的反馈信息
6; 关闭Socket流
public static void main(String[] args) {Socket sk = null;try {// 创建客户端的Socket对象sk = new Socket("127.0.0.1", 12345);// 准备要发送的数据String str = "我来了";// 通过Socket对象中的输出流,完成数据的发送OutputStream os = sk.getOutputStream();os.write(str.getBytes());// 告知服务器 ,数据已发送完毕, shutdownOutput()sk.shutdownOutput();// 获取服务器的反馈信息InputStream is = sk.getInputStream();byte[] by = new byte[1024];int len = is.read(by);str = new String(by, 0, len);System.out.println(str);} catch (Exception e) {} finally {//如果sk不为null则关闭流if (sk != null) {try {// 关闭Socket流sk.close();} catch (IOException e) {e.printStackTrace();}}}}
服务器端:
1: 创建服务器端ServerSocket对象
2: 等待客户端的连接
3: 创建线程对象,并启动,通过每个线程对象,来完成与客户端Socket对象
的数据传输
public static void main(String[] args) throws IOException {// 创建服务器端ServerSocket对象ServerSocket ss = new ServerSocket(11114);while (true) {// 等待客户端的连接Socket s = ss.accept();// 创建线程对象,并启动,通过每个线程对象,来完成与客户端Socket对象<span style="font-size:24px;">的数据传输</span>new TcpServer(s).start();}}
String ip = s.getInetAddress().getHostAddress();
b: 获取数据
1): 获取客户端的输入流对象
2): 通过输入流对象, 读取流中的数据
3): 把数据进行处理(打印,存储到文件中)
c: 编写客户端反馈信息
1): 获取客户端的输出流对象
2): 写 给客户端的反馈信息
d: 关闭客户端Socket流
<span style="font-size:24px;">public class TcpServer extends Thread {private Socket s;public TcpServer(Socket s) {super();this.s = s;}@Overridepublic void run() {// 获取IP地址String str1 = s.getInetAddress().getHostAddress();try {// 获取数据BufferedReader br = new BufferedReader(new /* 通过输入流对象, 读取流中的数据 */InputStreamReader(/* 获取客户端的输入流对象 */s.getInputStream()));for (String str = ""; (str = br.readLine()) != null;) {// 把数据进行处理(打印,存储到文件中)System.out.println(str1 + ":" + str);}// 获取客户端的输出流对象OutputStream os = s.getOutputStream();// 写 给客户端的反馈信息os.write("收到".getBytes());} catch (IOException e) {e.printStackTrace();} finally {if (s != null) {try {// 关闭客户端Socket流s.close();System.out.println(str1 + "已退出");} catch (IOException e) {e.printStackTrace();}}}}}</span>
0 0
- JAVA网络编程基础
- Java网络编程基础
- java网络编程基础
- Java网络编程基础
- Java基础网络编程
- Java网络编程基础
- java基础<网络编程>
- java网络编程基础
- Java网络编程基础
- java基础:网络编程
- Java基础:网络编程
- 【java】网络编程基础
- java网络编程基础
- java网络编程基础
- Java基础--网络编程
- Java 网络编程基础
- Java基础:网络编程
- java基础--网络编程
- s2
- s3
- HDU-1236-排名
- 说
- OCR破坏与恢复
- JAVA基础----网络编程
- Swift字典总结
- 梯度法(SGD)、拟牛顿法(LBFGS)与共轭梯度法(CG)
- 将数据文件恢复到不同的路径
- spring生命周期init-method destroy-methd 不要和prototype一起用
- 【转】理解矩阵(一)
- selenium模拟鼠标键盘(一)
- 桥连模式——对象结构模型
- C++构造函数详解及显式调用构造函数