【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

相关文章

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

Java应用如何防止恶意文件上传

《Java应用如何防止恶意文件上传》恶意文件上传可能导致服务器被入侵,数据泄露甚至服务瘫痪,因此我们必须采取全面且有效的防范措施来保护Java应用的安全,下面我们就来看看具体的实现方法吧... 目录恶意文件上传的潜在风险常见的恶意文件上传手段防范恶意文件上传的关键策略严格验证文件类型检查文件内容控制文件存储

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

Java实现MinIO文件上传的加解密操作

《Java实现MinIO文件上传的加解密操作》在云存储场景中,数据安全是核心需求之一,MinIO作为高性能对象存储服务,支持通过客户端加密(CSE)在数据上传前完成加密,下面我们来看看如何通过Java... 目录一、背景与需求二、技术选型与原理1. 加密方案对比2. 核心算法选择三、完整代码实现1. 加密上

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与