Java 网络编程
时间:2022-07-22
本文章向大家介绍Java 网络编程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.获取主机名,IP地址
public static void main(String[] args) throws UnknownHostException {
InetAddress adress = InetAddress.getByName("n");
String ipname = adress.getHostAddress();
String Hostname = adress.getHostName();
System.out.println(ipname+"---"+Hostname);
}
2.UDP编程
客户端
/*
* 1.创建发送的Socket对象
* 2.创建数据并打包
* 3.调用Socket的发送方法发送数据包
* 4.释放资源
* 可以运行
*/
public static void main(String[] args) throws IOException {
//创建Socket对象
DatagramSocket ds = new DatagramSocket();
//创建并打包数据
//DatagramPacket(byte[] buf,int length,InetAddress address,int port),数据包的格式
//1.创建要发送的字节数组
byte[] bs = "国芳小果果".getBytes();
//2.得到数据的长度
int len = bs.length;
//获得IP地址
InetAddress address = InetAddress.getByName("n");
//设置端口号
int port = 8888;
//创建数据包
DatagramPacket dp = new DatagramPacket(bs, len, address, port);
//调用Socket的发送方法发送数据包
//send(DatagramPacket p)
ds.send(dp);
//释放资源
ds.close();
}
服务端
/*
* 1.创建连接的Socket对象
* 2.创建接受数据对象
* 2.接受数据包
* 3.解析数据并显示在控制台
* 3.释放资源
*/
public static void main(String[] args) throws IOException {
//创建UDP编程的Socket,接受数据时必须指定端口号
DatagramSocket ds = new DatagramSocket(8888);
//创建用于接受数据的数据包
byte[] bs = new byte[1024];
DatagramPacket dp = new DatagramPacket(bs, 1024);
//接受数据
ds.receive(dp);
System.out.println(new String(bs));
//释放资源
ds.close();
}
3.UDP实现键盘数据的传输,同时使用广播IP地址实现一对多传输
public class SocketSend {
/*
* 数据来自于键盘录入
* 键盘录入数据要自己控制录入结束
* UDP的广播IP是255.255.255.255
*/
public static void main(String[] args) throws IOException {
//创建Socket对象
DatagramSocket ds = new DatagramSocket();
//封装键盘录入数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = br.readLine())!=null){
if(line.equals("886")){ //如果送入数据等于886,停止输入
break;
}
//创建数据并打包
byte[] bs = line.getBytes();
DatagramPacket dp = new DatagramPacket(bs, bs.length,InetAddress.getByName("255.255.255.255"),10087);
//发送数据
ds.send(dp);
}
ds.close();
}
}
public class SocketReceive {
public static void main(String[] args) throws IOException {
//创建Socket接受类
DatagramSocket ds = new DatagramSocket(10087);
while(true){
//创建一个包裹
byte[] bs = new byte[1024];
DatagramPacket dp = new DatagramPacket(bs, bs.length);
//接受数据
ds.receive(dp);
//解析数据
String ip = dp.getAddress().getHostAddress();
String s = new String(dp.getData(),0,dp.getData().length);
System.out.println("from"+ip+"data is"+s);
}
}
}
4.通过多线程实现在同框进行聊天
public class chatRoom {
/*
* 通过多线程改变程序我就可以在一个窗口里进行聊天了
*/
public static void main(String[] args) throws IOException {
//发送数据
DatagramSocket dsSend = new DatagramSocket();
DatagramSocket dsRece = new DatagramSocket(10026);
//多线程启动接收机
SendThread st = new SendThread(dsSend);
ReceiveThread rt = new ReceiveThread(dsRece);
//创建线程对线
Thread t1 = new Thread(st);
Thread t2 = new Thread(rt);
t1.setPriority(10);
//启动线程
t1.start();
t2.start();
}
}
public class SendThread implements Runnable{
private DatagramSocket ds;
public SendThread(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
try{
//封装键盘录入数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = br.readLine())!=null){
if(line.equals("886")){ //如果送入数据等于886,停止输入
break;
}
//创建数据并打包
byte[] bs = line.getBytes();
DatagramPacket dp = new DatagramPacket(bs, bs.length,InetAddress.getByName("255.255.255.255"),10026);
ds.send(dp);
}
ds.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
public class ReceiveThread implements Runnable{
private DatagramSocket ds;
public ReceiveThread(DatagramSocket ds){
this.ds =ds;
}
@Override
public void run() {
try{
while(true){
//创建一个包裹
byte[] bs = new byte[1024];
DatagramPacket dp = new DatagramPacket(bs, bs.length);
//接受数据
ds.receive(dp);
//解析数据
String ip = dp.getAddress().getHostAddress();
String s = new String(dp.getData(),0,dp.getData().length);
System.out.println("from"+ip+"data is"+s);
System.out.println();
}
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
5实现TCP的网络协议编程
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建客户端套接字
Socket s = new Socket("n", 22222);
//封装键盘流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//创建写入流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//创建临时存储
String line = null;
while((line=br.readLine())!=null){
if("over".equals(line)){
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}
s.close();
}
}
public class ServerDemo {
public static void main(String[] args) throws IOException {
//创建服务器套接字
ServerSocket ss = new ServerSocket(22222);
//开启监听
Socket s = ss.accept();
//创建高效读取类,字符字节转换类,套接字字节通道流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
// //创建反馈流
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//创建临时存储
String line = null;
//提供读取
while((line=br.readLine())!=null){
System.out.println(line);
}
s.close();
}
}
}
6.写到文件
public static void main(String[] args) throws IOException {
//创建服务器套接字
ServerSocket ss = new ServerSocket(22222);
//开启监听
Socket s = ss.accept();
//创建高效读取类,字符字节转换类,套接字字节通道流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
// //创建文本流
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
//创建临时存储
String line = null;
//提供读取
while((line=br.readLine())!=null){
System.out.println(line);
bw.write(line);
bw.newLine();
bw.flush();
}
s.close();
bw.close();
}
7.从文件中读取,在服务器中输出
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建客户端套接字
Socket s = new Socket("n", 22222);
//封装文本文件的读取路径
BufferedReader br = new BufferedReader(new FileReader("SocketSend.java"));
//创建输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line = null;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
s.close();
}
}
8,文件的上传带反馈
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建客户端套接字
Socket s = new Socket("n", 22222);
//封装文本文件的读取路径
BufferedReader br = new BufferedReader(new FileReader("SocketSend.java"));
//创建输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//读取流
BufferedReader brs = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
s.shutdownOutput();//提示输入结束
String str = brs.readLine();
System.err.println(str);
//释放资源
br.close();
s.close();
}
}
//服务端
public class ServerDemo {
public static void main(String[] args) throws IOException {
//创建服务器套接字
ServerSocket ss = new ServerSocket(22222);
//开启监听
Socket s = ss.accept();
//创建读取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//创建文本输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("CopyAction.java"));
String line = null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
BufferedWriter bws = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bws.write("我收到了");
bws.newLine();
bws.flush();
//释放资源
bws.close();
bw.close();
s.close();
}
}
9.上传图片
public class uploadClient {
public static void main(String[] args) throws IOException {
//创建客户端套接字Socket
Socket s = new Socket("n",9999);
//封装图片
BufferedInputStream bis = new BufferedInputStream(new FileInputStream
(new File("C:\Users\DELL\Pictures\2015-04-25\生活\1.jpg")));
//创建写入通道
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
//创建读取
byte[] bs = new byte[1024];
int len = 0;
while((len = bis.read(bs))!=-1){
bos.write(bs,0,len);
}
s.shutdownOutput();
//创建读取流
String line = null;
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
line = br.readLine();
System.err.println(line);
//释放资源
s.close();
bis.close();
}
}
public class uploadServer {
public static void main(String[] args) throws IOException {
//创建服务器端套接字socket
ServerSocket ss = new ServerSocket(9999);
//创建监听
Socket s = ss.accept();
//创建字节读取流
BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
//创建图片复制流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("mn.jpg"));
//读取数组
byte[] bs = new byte[1024];
int len = 0;
while((len=bis.read(bs))!=-1){
bos.write(bs,0,len);
}
//创建反馈流
OutputStream os = s.getOutputStream();
os.write("我收到了".getBytes());
//释放资源
os.close();
s.close();
}
}
10.多客户端与一服务器通信
public class ClientDemo {
public static void main(String[] args) throws IOException {
//创建客户端套接字
Socket s = new Socket("n", 11111);
//封装文本文件的读取路径
BufferedReader br = new BufferedReader(new FileReader("ServerDemo.java"));
//创建输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
//读取流
BufferedReader brs = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = null;
while((line = br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
s.shutdownOutput();
String str = brs.readLine();
System.err.println(str);
//释放资源
br.close();
s.close();
}
}
public class UserThread implements Runnable{
private Socket s;
public UserThread(Socket s) {
this.s = s;
}
@Override
public void run() {
try{
//创建读取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
//创建文本输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("CopyAction.java"));
String line = null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
BufferedWriter bws = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bws.write("我收到了");
bws.newLine();
bws.flush();
//释放资源
bws.close();
bw.close();
s.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
public class UPloadServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(11111);
while(true){
Socket s = ss.accept();
new Thread(new UserThread(s)).start();
}
}
}
- 【Dev Club分享】JSPatch成长之路
- Node.js新手必须知道的4个JavaScript概念
- 博客文章重新启用评论,附一键填写评论中用户信息代码生成工具
- 提升 Node.js 应用性能的 5 个技巧
- 再次扩散:Linux系统bash漏洞CVE-2014-6271仍未被彻底修复,红帽再发补丁
- SEO分享:彻底禁止搜索引擎收录非首选域名的方法
- 紧急扩散:Linux系统bash严重安全漏洞CVE-2014-6271的检测及修复方法
- 手游热更新方案xLua开源:Unity3D下Lua编程解决方案
- WordPress评论滑动/拉链解锁myQaptcha代码版及部署方法
- 修改WordPress分类目录和页面链接以斜杠/结尾,附nginx对应的301跳转设置方法
- 彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
- 解决Crayon Syntax Highlighter代码高亮与fancybox图片暗箱冲突问题
- 移动搜索SEO:网站移动适配之Meta标注、移动跳转终结篇
- http加速器Varnish的vcl配置小记(lnmp环境)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 给Linux增加swap内存
- 网鼎杯2018-Fakebook
- 强网杯2019-高明的黑客
- CISCN2019华北赛区Day2-HackWorld
- ZJCTF-NiZhuanSiWei
- xxe漏洞学习
- De1CTF2019-SSRFME
- BJDCTF2nd-EasyMd5
- BJDCTF2nd-fakegoogle
- java_Scanner类、Random类、ArrayList 类的使用
- 使用Python获取Oracle索引信息
- 监控Oracle数据泵状态
- MySQL MHA部署 Part 5 MHA部署指南
- MySQL MHA部署 Part 6 MHA故障转移测试
- 一步步搭建基于GTID的MySQL复制