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 ...
随机推荐
- Linux基础学习 | 目录及文件
一.目录结构 Linux目录采用树形结构,以根目录/向下延伸呈一个倒置的树的形状. 每个目录下都有其相对应的子目录,而子目录中又有其子目录的存在,就像一棵树的树枝分叉,所有的目录层次结构分明,每个目录 ...
- matlab二维插值--interp2与griddata
二者均是常用的二维插值方法,两者的区别是, interp2的插值数据必须是矩形域(X,Y必须分别是单调向量),即已知数据点(x,y)组成规则的矩阵,或称之为栅格,可使用meshgid生成. gridd ...
- Logistic 回归模型的参数估计为什么不能采用最小二乘法?
logistic回归模型的参数估计问题,是可以用最小二乘方法的思想进行求解的,但和经典的(或者说用在经典线性回归的参数估计问题)最小二乘法不同,是用的是"迭代重加权最小二乘法"(I ...
- s函数中积分程序更改
function [sys,x0,str,ts,simStateCompliance] = int_hyo(t,x,u,flag) switch flag, case 0, [sys,x0,str,t ...
- 夏日葵电商:连锁零售店小程序o2o系统解决方案
公众平台"附近小程序"功能上线后,一个主体账号可以同时绑定N+个门店,这对连锁零售店铺来说是重磅福利呀,无论你是通过搜索还是线下扫码进入小程序,线上与线下都完全贯通了,线上多种入口 ...
- h5 ios输入框与键盘 兼容性优化
起因 h5的输入框引起键盘导致体验不好,目前就算微信.知乎.百度等产品也没有很好的技术方案实现,尤其底部固定位置的输入框各种方案都用的前提下体验也并没有很好,这个问题也是老大难问题了.目前在准备一套与 ...
- POP3:基于命令行的电子邮件(EMail)在线查看和批量下载工具
使用该工具可以在不安装outlook和foxmail等邮件客户端的情况下快速下载指定邮箱的邮件,并将下载的邮件以eml格式进行保存. 附: 查看eml格式的邮件可使用 EmlReader 工具,该工具 ...
- linux系统引导过程
linux系统引导过程 linux-0.11引导时,将依次运行BIOS程序.bootsect.s.setup.s和head.s,完成引导过程后进入到main函数运行.BIOS完成硬件的检查与初始化等工 ...
- python-筛法求素数
[题目描述]用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数. [练习要求]请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释. [输入格式 ...
- PAT B1042 字符统计
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...