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 ...
随机推荐
- 给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
对于N阶幻方,从1开始把数字从小到大按以下规则依次写入: 一.在第一行中间一列写入1 二.依次向右上方写入2.3.4...... 三.如果某数字写在了表格的某个方向外面,那就把这个数字向相反方向移动N ...
- 你将如何使用 thread dump?你将如何分析 Thread dump?
新建状态(New) 用 new 语句创建的线程处于新建状态,此时它和其他 Java 对象一样,仅仅在堆区 中被分配了内存. 就绪状态(Runnable) 当一个线程对象创建后,其他线程调用它的 sta ...
- django-debug-toolbar 开发利器的使用教程
django-debug-toolbar介绍 django-debug-toolbar 是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. 下载安装 ...
- resin服务之二----整合resin+Apache服务
整合resin+Apache服务 1.为什么要整合Apache和resin? a. 早期的resin,tomcat对httpd服务支持不好. b. tomcat,resin对rewrite,expi ...
- Linux下切换python2和python3
为什么需要有两个版本的Python Python2和Python3不兼容是每个接触过Python的开发者都知道的事,虽说Python3是未来,但是仍然有很多项目采用Python2开发.Linux的许多 ...
- ML、DL及RL介绍和区别
前言 在刚入门的时候,我们很容易被这些词语弄得眼花缭乱,如人工智能.机器学习.深度学习及强化学习等等.它们之间互相联系,却有一定区别.我们学习人工智能AI,需要对这些词语有一定的概念,不然,研究了这么 ...
- Cadence 错误合集
1.原理图DRC出现如下错误"Duplicate Pin Name "GND" found on Packag" 解决方案:原因是元件引脚重复定义,可以进行重新 ...
- 动态规划 洛谷P4017 最大食物链计数——图上动态规划 拓扑排序
洛谷P4017 最大食物链计数 这是洛谷一题普及/提高-的题目,也是我第一次做的一题 图上动态规划/拓扑排序 ,我认为这题是很好的学习拓扑排序的题目. 在这题中,我学到了几个名词,入度,出度,及没有环 ...
- javaScript设计模式:发布订阅模式
发布订阅模式的思想是在观察者模式的基础上演变而来,在观察者模式中客户端监听到对象某个行为就触发对应任务程序.而在发布订阅模式中依然基于这个核心思想,所以有时候也会将两者认为是同一种设计模式.它们的不同 ...
- c语言实现循环单链表
//初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); head->next=NULL; head->data=-1; ...