Java学习笔记-基础语法ⅩⅠ-UDP、TCP
网络编程
三要素:IP地址、端口、协议
IP地址:使用ipconfig查看,如果装了VM的话,会有VMnet1、VMnet8和WLAN,net1不能从虚拟机到主机,net8不能从主机到虚拟机,net0即桥接可以当成物理主机,我们只需要使用WLAN即可
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Demo {
public static void main(String[] args) throws UnknownHostException {
InetAddress inetAddress = InetAddress.getByName("xx.xx.xx.xx");
byte[] address = inetAddress.getAddress();
String hostAddress = inetAddress.getHostAddress();
String hostName = inetAddress.getHostName();
System.out.println(hostName);
System.out.println(hostAddress);
// System.out.println(address);
for(byte b:address){
System.out.print(b);
}
}
}
使用UDP进行发送数据与接收数据
// 发送数据
import java.io.IOException;
import java.net.*;
public class SendDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket();
byte [] bys = "Hello World!".getBytes();
// xx.xx.xx.xx
InetAddress inetAddress = InetAddress.getByName("xx.xx.xx.xx");
DatagramPacket dp = new DatagramPacket(bys,0,bys.length,inetAddress,10086);
ds.send(dp);
ds.close();
}
}
// 接收数据
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Receive_demo {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(10086);
byte [] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length);
ds.receive(dp);
byte[] datas = dp.getData();
String s = new String(datas,0,dp.getLength());
System.out.println(s);
ds.close();
}
}
自己在用windows去发内容给linux时,没问题,但是对计网的IPv4又忘了,明明windows下net8显示末8位是1,但是到了虚拟机上末8位却是128,现在不太清楚,等寒假再复习一下计网
UDP通信程序练习:
- UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
- UDP接收数据,因为接收端不知道发送端什么时候发送停止,故采用死循环接收
// 循环发送端
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class Udp_send {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
DatagramSocket ds = new DatagramSocket();
String nextLine;
while(!"886".equals(nextLine=sc.nextLine())){
byte [] bys = nextLine.getBytes();
InetAddress inetAddress = InetAddress.getByName("10.82.210.42");
DatagramPacket dp = new DatagramPacket(bys,0,bys.length, inetAddress,10085);
ds.send(dp);
}
ds.close();
}
}
// x
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Udp_receive {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(10085);
while(true){
byte [] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys,bys.length);
ds.receive(dp);
byte[] data = dp.getData();
String s = new String(data,0,dp.getLength());
System.out.println(s);
}
}
}
TCP通信
tcp在通信的两端各建立一个socket对象,Java为客户端提供了socket类,为服务器端提供了ServerSocket类
// send
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class TCP_send {
public static void main(String[] args) throws IOException {
Socket s = new Socket("10.99.161.223",10000);
OutputStream os = s.getOutputStream();
byte[] bytes = "hello tcp".getBytes(StandardCharsets.UTF_8);
os.write(bytes);
os.close();
}
}
// receive
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCP_receive {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10000);
Socket accept = ss.accept();
InputStream inputStream = accept.getInputStream();
byte [] bys = new byte[1024];
int len = inputStream.read(bys);
String data = new String(bys,0,len);
System.out.println(data);
ss.close();
}
}
双向奔赴:客户端发送数据,并且从服务端接收数据;服务端接收数据,然后发送反馈
// 发送
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Send_demo {
public static void main(String[] args) throws IOException {
Socket s = new Socket("10.99.161.223",10001);
OutputStream os = s.getOutputStream();
os.write("我正在发送数据".getBytes(StandardCharsets.UTF_8));
InputStream is = s.getInputStream();
byte [] bys = new byte[1024];
int len = is.read(bys);
System.out.println(new String(bys,0,len));
s.close();
}
}
// j
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Receive_demo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10001);
Socket sc = ss.accept();
InputStream is = sc.getInputStream();
byte [] bys = new byte[1024];
int len = is.read(bys);
System.out.println(new String(bys,0,len));
OutputStream os = sc.getOutputStream();
os.write("我正在接收数据".getBytes(StandardCharsets.UTF_8));
ss.close();
}
}
发送时,终止发送使用shutdownOutput语句
// 接收
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class receive_demo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10000);
Socket accept = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(accept.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test.java")));
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));
bwServer.write("文件上传成功!");
bwServer.newLine();
bwServer.flush();
ss.close();
}
}
// 发送
import java.io.*;
import java.net.Socket;
public class send_demo {
public static void main(String[] args) throws IOException {
Socket s = new Socket("192.168.124.12",10000);
BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\liupeng\\Desktop\\code\\java_project\\Net_demo\\src\\demo\\Animal.java"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
// 使用shutdown语句来终止发送
s.shutdownOutput();
// 接收反馈
BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
line = brClient.readLine();
System.out.println(line);
br.close();
s.close();
}
}
最后还可以进行多线程上传文件
Java学习笔记-基础语法ⅩⅠ-UDP、TCP的更多相关文章
- Java学习笔记-基础语法Ⅳ
多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...
- Java学习笔记-基础语法
Java基础包含关键字,标识符,注释,常量和变量,运算符 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 Java的关键字 用于定义数据类型的关键 ...
- Java学习笔记-基础语法Ⅹ-进程线程
学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...
- Java学习笔记-基础语法Ⅷ-泛型、Map
泛型 泛型本质上是参数化类型,也就是说所操作的数据类型被指定为一个参数,即将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型,这种参数类型可以用在类.方法和接口中,分别为泛型类.泛型方法 ...
- Java学习笔记-基础语法Ⅴ
学习一些Java常用的API Math:包含执行基本数字运算的方法 如果没有构造方法,一般类的成员都是静态的,通过类名可以直接调用 Java中有两种random函数,Math.Random()函数能够 ...
- JAVA 学习笔记 - 基础语法 2
---恢复内容开始--- 1.数组的申明和应用 数据类型 数组名称[] = null; //在堆栈中申明变量名称 数组名称 = new 数据类型[10]; // ...
- JAVA 学习笔记 - 基础语法1
1. 类的定义 public class 与 class的区别 一个java文件只有一个public class, 而且类名必须与文件名一致. 一个java文件可以有多个class定义,javac ...
- Java学习笔记-基础语法Ⅸ-文件
File File是文件和路径名的抽象表示,File封装的并不是一个真正存在的文件,是一个路径名,可以存在也可以不存在 常用方法: 创建文件:createNewFile() 创建目录:mkdir() ...
- Java学习笔记-基础语法Ⅶ-集合
集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...
随机推荐
- TIME_WAIT 优化
·[场景描述] HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟. 如果我们使用了nginx去作为 ...
- Python - Python函数简介
- 2D骨骼动画工具DragonBones的使用教程
怎样用更少的美术成本创造出更生动的动画效果?今天就为大家介绍一套开源的2D骨骼动画框架和工具--DragonBones,它包含了桌面骨骼动画制作工具DragonBonesPro和一套多语言版本的Dra ...
- EMS已有用户分配邮箱方法
案例任务:已有域用户"test100",为该用户分配邮箱. 分配邮箱前,使用"get-user"命令确认用户类型.域用户"test100"的 ...
- python---快速排序的实现
def quick_sort(alist, start, end): """快速排序""" # 递归退出 if start >= en ...
- Spring-注入方式(基于xml方式)
1.基于xml方式创建对象 <!--配置User类对象的创建 --> <bean id="user" class="com.at.spring5.Use ...
- 【转载】Java密钥库及keytool使用详解
---------------- 版权声明:本文为CSDN博主「adrninistrat0r」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https: ...
- 【图文教学】如何轻松下载tiktok上的视频
我是真诚的想和大家分享这个办法的!这个叫光影存图,图标就是这个绿色的箭头,我是苹果手机,安卓手机也可以用,就是它分免费版和会员版的,没有强制要你充会员,看一下广告就可以获取下载次数,我就是这么干的,只 ...
- 面试官:RabbitMQ怎么实现消费端限流
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 RabbitMQ有很多高级特性, ...
- Mysql学习day1
安装了Mysql以及SQLyog,将SQLyog和数据库做了连接. 学习了基础数据类型以及命令行语句 1 alter table `student` rename as `stu``lesson` 2 ...