网络编程

三要素: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的更多相关文章

  1. Java学习笔记-基础语法Ⅳ

    多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...

  2. Java学习笔记-基础语法

    Java基础包含关键字,标识符,注释,常量和变量,运算符 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 Java的关键字 用于定义数据类型的关键 ...

  3. Java学习笔记-基础语法Ⅹ-进程线程

    学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...

  4. Java学习笔记-基础语法Ⅷ-泛型、Map

    泛型 泛型本质上是参数化类型,也就是说所操作的数据类型被指定为一个参数,即将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型,这种参数类型可以用在类.方法和接口中,分别为泛型类.泛型方法 ...

  5. Java学习笔记-基础语法Ⅴ

    学习一些Java常用的API Math:包含执行基本数字运算的方法 如果没有构造方法,一般类的成员都是静态的,通过类名可以直接调用 Java中有两种random函数,Math.Random()函数能够 ...

  6. JAVA 学习笔记 - 基础语法 2

    ---恢复内容开始--- 1.数组的申明和应用 数据类型 数组名称[] = null;             //在堆栈中申明变量名称 数组名称 =  new  数据类型[10];       // ...

  7. JAVA 学习笔记 - 基础语法1

    1. 类的定义 public class  与  class的区别 一个java文件只有一个public class, 而且类名必须与文件名一致. 一个java文件可以有多个class定义,javac ...

  8. Java学习笔记-基础语法Ⅸ-文件

    File File是文件和路径名的抽象表示,File封装的并不是一个真正存在的文件,是一个路径名,可以存在也可以不存在 常用方法: 创建文件:createNewFile() 创建目录:mkdir() ...

  9. Java学习笔记-基础语法Ⅶ-集合

    集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...

随机推荐

  1. CPU架构:CPU架构详细介绍

    1 概述 CPU架构是CPU商给CPU产品定的一个规范,主要目的是为了区分不同类型的CPU.目前市场上的CPU分类主要分有两大阵营,一个是intel.AMD为首的复杂指令集CPU,另一个是以IBM.A ...

  2. 【小程序开发】文本text-overflow属性的使用

    text-overflow原本是CSS3的一个属性,在微信小程序中也支持. text-overflow文本溢出显示省略号~ 注:使用text-overflow时,需要设置固定的宽度才起作用,所以该元素 ...

  3. java中将科学技术发转为正常数据

    import java.text.NumberFormat; public class test { public static void main(String[] args) { double d ...

  4. JAVA对XML文件的读写

    XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令处理指令,简 ...

  5. 关于表达式&& 和 || 有多项的时候的取值

    && 表达式只有两项的时候,如果表达式为false, 返回为false 的那一个 ,为true的时候    返回最后一个值 ||  只有两项的时候,返回为true 的那一个;都为fal ...

  6. Visual Studio 2022 git error Unable to negotiate with xx.xxx.xxxx port 22: no matching host key type found. Their offer: ssh-rsa

    前言 前两天因为升级了Git导致git提交拉取的时候都提示下面这个异常,然后经过一番折腾以后终于把这个问题解决了.但是今天我升级了下Visual Studio 2022将其升级到了17.1.3版本然后 ...

  7. 线性表(python实现)

    线性表 1 定义 线性表是由 \(n(n>=0)\)个数据元素(节点)\(a1.a2.a3.-.an\) 成的有限序列.该序列中的所有节点都具有相同的数据类型.其中,数据元素的个数 \(n\) ...

  8. 帝国CMS灵动标签调用相关文章

    标题包含关键字①.比较粗糙的匹配,可能不太精确:title like '%$navinfor[keyboard]%' ②.精确的匹配,比较消耗资源:title regexp '(^|,)$navinf ...

  9. Java学习day6

    今天跟着教学视频做了个简易的学生管理系统 在编写完全部代码之后出现了在空白处右键没有run as选项的问题,通过csdn与博客园上的多个帖子介绍,得知是jdk配置不对,正确配置后问题得到解决 明天学习 ...

  10. JavaWeb学习第一阶段结束

    模仿狂神实现简单的用户增删改查,增加了前端登录时的密码验证 JavaWeb学习第一阶段结束,相较于第一阶段的一味学习,第二阶段想拿出更多的时间来阅读别人的源码以及跟着做简单的小项目,同时进一步深入学习 ...