【24】网络编程2_TCP并发上传图片和登录,Tomcat服务器,自定义IE,域名解析

本文主要是介绍【24】网络编程2_TCP并发上传图片和登录,Tomcat服务器,自定义IE,域名解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


练习一:客户端把图片上传到服务器,服务器返回信息

 
/*
需求:上传图片。
客户端。
1,服务端点。
2,读取客户端已有的图片数据。
3,通过socket 输出流将数据发给服务端。
4,读取服务端反馈信息。
5,关闭。*/import java.io.*;
import java.net.*;
class PicClient
{public static void main(String[] args)throws Exception{Socket s = new Socket("192.168.1.254",10007);FileInputStream fis = new FileInputStream("c:\\1.bmp");OutputStream out = s.getOutputStream();byte[] buf = new byte[1024];int len = 0;while((len=fis.read(buf))!=-1){out.write(buf,0,len);}//告诉服务端数据已写完s.shutdownOutput();InputStream in = s.getInputStream();byte[] bufIn = new byte[1024];int num = in.read(bufIn);System.out.println(newString(bufIn,0,num));fis.close();s.close();}
}/*
服务端
*/
class PicServer
{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10007);Socket s = ss.accept();InputStream in = s.getInputStream();FileOutputStream fos = new FileOutputStream("server.bmp");byte[] buf = new byte[1024];int len = 0;while((len=in.read(buf))!=-1){fos.write(buf,0,len);}OutputStream out = s.getOutputStream();out.write("上传成功".getBytes());fos.close();s.close();ss.close();}
}


 

练习二:服务端开启多个线程完成多个客户端的迸发访问请求,并且在传文件前先判断文件是否符合服务器要求

 

 

/*
需求:上传图片。*/
/*
客户端。
1,服务端点。
2,读取客户端已有的图片数据。
3,通过socket 输出流将数据发给服务端。
4,读取服务端反馈信息。
5,关闭。*/import java.io.*;
import java.net.*;
class PicClient
{public static void main(String[] args)throws Exception{if(args.length!=1){System.out.println("请选择一个jpg格式的图片");return;}File file = new File(args[0]);if(!(file.exists()&& file.isFile())){System.out.println("该文件有问题,要么补存在,要么不是文件");return;}if(!file.getName().endsWith(".jpg")){System.out.println("图片格式错误,请重新选择");return;}if(file.length()>1024*1024*5){System.out.println("文件过大,没安好心");return;}Socket s = new Socket("192.168.1.254",10007);FileInputStream fis = new FileInputStream(file);OutputStream out = s.getOutputStream();byte[] buf = new byte[1024];int len = 0;while((len=fis.read(buf))!=-1){out.write(buf,0,len);}//告诉服务端数据已写完s.shutdownOutput();InputStreamin = s.getInputStream();byte[]bufIn = new byte[1024];intnum = in.read(bufIn);System.out.println(newString(bufIn,0,num));fis.close();s.close();}
}/*
服务端这个服务端有个局限性。当A客户端连接上以后。被服务端获取到。服务端执行具体流程。
这时B客户端连接,只有等待。
因为服务端还没有处理完A客户端的请求,还有循环回来执行下次accept方法。所以
暂时获取不到B客户端对象。那么为了可以让多个客户端同时并发访问服务端。
那么服务端最好就是将每个客户端封装到一个单独的线程中,这样,就可以同时处理多个客户端请求。如何定义线程呢?只要明确了每一个客户端要在服务端执行的代码即可。将该代码存入run方法中。
*/class PicThread implements Runnable
{private Socket s;PicThread(Sockets){this.s= s;}public void run(){int count = 1;String ip  =s.getInetAddress().getHostAddress();try{System.out.println(ip+"....connected");InputStreamin = s.getInputStream();Filedir =  new File("d:\\pic");Filefile = new File(dir,ip+"("+(count)+")"+".jpg");while(file.exists())file= new File(dir,ip+"("+(count++)+")"+".jpg");FileOutputStreamfos = new FileOutputStream(file);byte[]buf = new byte[1024];intlen = 0;while((len=in.read(buf))!=-1){fos.write(buf,0,len);}OutputStreamout = s.getOutputStream();out.write("上传成功".getBytes());fos.close();s.close();}catch(Exception e){thrownew RuntimeException(ip+"上传失败");}}
}class PicServer
{public static void main(String[] args) throws Exception{ServerSocket ss = new ServerSocket(10007);while(true){Socket s = ss.accept();new Thread(new PicThread(s)).start();}//ss.close();}
}


 

练习三:自定义一个IE浏览器(只有Socket传输功能,没有解析功能)

                   用GUI图形化界面仿制一个IE浏览器

 

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class MyIEByGUI
{private Frame f;private TextField tf;private Button but;private TextArea ta;private Dialog d;private Label lab;private Button okBut;MyIEByGUI(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,600,500);f.setLayout(newFlowLayout());tf = new TextField(60);but = new Button("转到");ta = new TextArea(25,70);d = new Dialog(f,"提示信息-self",true);d.setBounds(400,200,240,150);d.setLayout(newFlowLayout());lab= new Label();okBut= new Button("确定");d.add(lab);d.add(okBut);f.add(tf);f.add(but);f.add(ta);myEvent();f.setVisible(true);}private void  myEvent(){okBut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){d.setVisible(false);}});d.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){d.setVisible(false);}});tf.addKeyListener(newKeyAdapter(){public void keyPressed(KeyEvent e){try{if(e.getKeyCode()==KeyEvent.VK_ENTER)showDir();}catch(Exception ex){}}});but.addActionListener(newActionListener(){public void actionPerformed(ActionEvent e){try{showDir();}catch(Exception ex){}}});f.addWindowListener(newWindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);        }});}private void showDir()throws Exception{ta.setText("");String url = tf.getText();//http://192.168.1.254:8080/myweb/demo.htmlint index1 = url.indexOf("//")+2;int index2 = url.indexOf("/",index1);String str = url.substring(index1,index2);String[] arr = str.split(":");String host = arr[0];int port = Integer.parseInt(arr[1]);String path = url.substring(index2);//ta.setText(str+"...."+path);Socket s = new Socket(host,port);PrintWriter out = new PrintWriter(s.getOutputStream(),true);out.println("GET"+path+" HTTP/1.1");out.println("Accept:*/*");out.println("Accept-Language:zh-cn");out.println("Host:192.168.1.254:11000");out.println("Connection:closed");out.println();out.println();BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line=bufr.readLine())!=null){ta.append(line+"\r\n");}s.close();}public static void main(String[] args){new MyIEByGUI();}
}


 

练习四:用GUI图形化界面仿制一个IE浏览器

 

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class MyIEByGUI2
{private Frame f;private TextField tf;private Button but;private TextArea ta;private Dialog d;private Label lab;private Button okBut;MyIEByGUI2(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,600,500);f.setLayout(newFlowLayout());tf = new TextField(60);but = new Button("转到");ta = new TextArea(25,70);d = new Dialog(f,"提示信息-self",true);d.setBounds(400,200,240,150);d.setLayout(newFlowLayout());lab = new Label();okBut = new Button("确定");d.add(lab);d.add(okBut);f.add(tf);f.add(but);f.add(ta);myEvent();f.setVisible(true);}private void  myEvent(){okBut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){d.setVisible(false);}});d.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){d.setVisible(false);}});tf.addKeyListener(newKeyAdapter(){public void keyPressed(KeyEvent e){try{if(e.getKeyCode()==KeyEvent.VK_ENTER)showDir();}catch(Exception ex){}}});but.addActionListener(newActionListener(){public void actionPerformed(ActionEvent e){try{showDir();}catch(Exception ex){}}});f.addWindowListener(newWindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);        }});}private void showDir()throws Exception{ta.setText("");String urlPath = tf.getText();//http://192.168.1.254:8080/myweb/demo.htmlURL url = new URL(urlPath);URLConnection conn = url.openConnection();InputStreamin = conn.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);ta.setText(newString(buf,0,len));}public static void main(String[] args){new MyIEByGUI2();}
}


这篇关于【24】网络编程2_TCP并发上传图片和登录,Tomcat服务器,自定义IE,域名解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016406

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4: