【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

相关文章

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统