Java——网络编程练习

练习一(黑马程序员面试题):客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到的是反转后的字符串

相关代码如下:

package com.wsq.test;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Test1_Client {
/*** 客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到的是反转后的字符串* @throws IOException * @throws UnknownHostException * * * */public static void main(String[] args) throws UnknownHostException, IOException {Scanner sc = new Scanner(System.in);            //创建键盘录入对象Socket wsq = new Socket("192.168.1.182",1014);  //创建Socket客户端,指定IP地址和端口号(不超过65535即可)BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream()));        //获取输入流PrintStream ps = new PrintStream(wsq.getOutputStream());            //获取输出流//对getInputStream()和getOutputStream()进行包装ps.println(sc.nextLine());                                      //客户端将字符串(键盘录入)写到服务器去System.out.println(br.readLine());                              //将反转后的结果读出来wsq.close();                            //只需要关Socket就行(wsq是Socket对象)//public void close()throws IOException //关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。 //也就是说,只要把Socket关闭,InputStream和OutputStream也会关闭}}
package com.wsq.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class Test2_Server {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(1014);//创建多线程服务器//public ServerSocket(int port)throws IOException创建绑定到特定端口的服务器套接字。端口 0 在所有空闲端口上创建套接字。//参数:port - 端口号;或者为 0,表示使用任何空闲端口。 System.out.println("服务器已启动,已绑定1014端口");//输出一句提示语句while(true){                                //不断地接收客户端的请求final Socket wsq = server.accept();     //接收客户端的请求//public Socket accept()throws IOException侦听并接受到此套接字的连接。//返回:新套接字 //匿名内部类所用到的局部变量必须被final修饰new Thread(){                           //运用匿名内部类,来开启一条线程public void run(){                  //重写Thread()这个(线程)抽象类里面的run方法try {BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream()));        //获取输入流PrintStream ps = new PrintStream(wsq.getOutputStream());        //获取输出流//客户端将内容给发送到服务端//再对getInputStream()和getOutputStream()方法进行包装String line = br.readLine();            //将客户端写过来的数据读取出来line = new StringBuilder(line).reverse().toString();    //链式编程//line = new StringBuilder(line)先把line封装成一个StringBuilder对象,变成一个缓冲区 //再.reverse(),进行反转(倒序)//然后再.toString()将数据转化成字符串ps.println(line);                       //把反转后的内容给写回去,然后再在Client(客户端)把写出来的数据给读出来//服务端进行将客户端发送的数据进行给读写出来wsq.close();                            //只需要关Socket就行(wsq是Socket对象)//public void close()throws IOException //关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。 //也就是说,只要把Socket关闭,InputStream和OutputStream也会关闭} catch (Exception e) {e.printStackTrace();}}}.start();}}}

练习二(黑马程序员面试题):客户端向服务器上传文件

相关步骤如下:* 1,提示输入要上传的文件路径,验证路径是否存在以及是否是文件夹* 2,发送文件名到服务器* 3,建立多线程的服务器* 4,读取文件名* 5,判断文件是否存在,将结果发回客户端* 6,接收结果,如果存在给予提示,程序直接退出* 7,如果不存在,定义FileInputStream读取文件,写出到网络* 8,定义FileOutputStream,从网络读取数据,存储到本地

相关代码如下:

package com.wsq.test;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;public class Test1_UpdateClient {
/*** * 客户端向服务器上传文件* * * 1,提示输入要上传的文件路径,验证路径是否存在以及是否是文件夹* 2,发送文件名到服务器* 6,接收结果,如果存在给予提示,程序直接退出* 7,如果不存在,定义FileInputStream读取文件,写出到网络* @throws IOException * @throws UnknownHostException * * * */public static void main(String[] args) throws UnknownHostException, IOException {
//1,提示输入要上传的文件路径,验证路径是否存在以及是否是文件夹File file = getFile();
//2,发送文件名到服务器Socket socket = new Socket("192.168.1.182",1014);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintStream ps = new PrintStream(socket.getOutputStream());     //创建输出流ps.println(file.getName());                                     //把文件名发送给服务端
//6,接收结果,如果存在给予提示,程序直接退出String result = br.readLine();                  //读取 “存在”或者“不存在”的结果if("存在".equals(result)){System.out.println("您上传的文件已经存在,请不要重复上传");socket.close();return;}
//7,如果不存在,定义FileInputStream读取文件,写出到网络FileInputStream fis = new FileInputStream(file);    //这里一定要用字节流,因为上传的文件可能是文本,也可能是音频,视频等文件,字节流可以拷贝任何文件byte [] arr = new byte[8192];int len;while((len = fis.read(arr)) != -1){ps.write(arr,0,len);                            //将读到的内容写到服务器上去//PrintStream既可以写字符串,也可以写字节,而BufferedWriter,是字符流,没办法写字节}                                           fis.close();socket.close();}private static File getFile() {//生成方11法,为了需要获取到文件Scanner sc = new Scanner(System.in);        // 创建键盘录入对象System.out.println("请输入一个文件路径");while(true){String line =sc.nextLine();File file = new File(line);if(! file.exists()){System.out.println("您录入的文件录入不存在,请重新录入:");}else if(file.isDirectory()){System.out.println("您录入的是文件夹路径,请录入一个文件路径:");}else{return file;}}}}
package com.wsq.test;import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class Test2_UpdateServer {
/*** * 3,建立多线程的服务器* 4,读取文件名* 5,判断文件是否存在,将结果发回客户端* 6,定义FileOutputStream,从网络读取数据,存储到本地* @throws IOException   * * * * */public static void main(String[] args) throws IOException {
//3,建立多线程的服务器ServerSocket server = new ServerSocket(1014); System.out.println("服务器已启动,已绑定1014端口号");//4,读取文件名while(true){final Socket socket = server.accept();      //接收客户端的请求 new Thread(){public void run(){try {InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));PrintStream ps = new PrintStream(socket.getOutputStream());     //创建输出流String fileName = br.readLine();    //读取文件名//5,判断文件是否存在,将结果发回客户端File dir = new File("update");dir.mkdir();                        //创建文件夹File file = new File(dir,fileName); //封装成File镀锡if(file.exists()){                  //如果服务器已经存在这个文件ps.println("存在");               //将“存在”写给客户端socket.close();                 //关闭socket;return;}else {ps.println("不存在");}
//8,定义FileOutputStream,从网络读取数据,存储到本地FileOutputStream fos = new FileOutputStream(file);byte [] arr = new byte [8192];int len;while((len = is.read(arr)) != -1){fos.write(arr, 0, len);}fos.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}.start();}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一章 基础知识---1.4Crack小实验--复现

0x01 程序及其编译环境 程序如下&#xff0c;功能&#xff1a;我们必须输入正确的密码1234567才能得到密码验证的确认&#xff0c;跳出循环。否则程序提示密码错误再次输入。 #include <stdio.h>#define PASSWORD "1234567"int verify_password(char* passwo…

.net中调用exchange服务器发邮件

普通的邮件, 用System.Net.Mail 类 或 System.Web.Mail 类 处理即可, 但是Exchange Server 环境下, 这两个类起不了作用-------至少目前我看到的情况如此. 整个过程如下: 1. 先添加COM 引用 "Microsoft CDO for Windows 2000 Library" .2. 发送邮件的代码: CDO.Messa…

Java Double类doubleToLongBits()方法与示例

Double类doubleToLongBits()方法 (Double class doubleToLongBits() method) doubleToLongBits() method is available in java.lang package. doubleToLongBits()方法在java.lang包中可用。 doubleToLongBits() method follows IEEE 754 double floating-point standards and …

Firefox(火狐浏览器)彩蛋

①在地址栏上输入&#xff1a; about:mozilla ②在地址栏上输入&#xff1a; about:robots ③在地址栏上输入&#xff1a; www.figma.com/404/ ④地址栏上输入&#xff1a; chrome://global/content/alerts/alert.xul

jquery.history插件在ie中失效的问题

hash标志中不能有? ff中不存在这个问题。 转载于:https://www.cnblogs.com/xyun/archive/2008/12/01/1345188.html

Java——反射(Class.forName()读取配置文件举例).

榨汁机(Juicer)榨汁机的案例&#xff1a; 分别有水果(Fruit),苹果(Apple)&#xff0c;香蕉(Bananal)&#xff0c;橘子(Orange),榨汁(squeeze) 要求&#xff1a; 榨出不同的水果汁来喝 //一般方法求解 package com.testl;public class Text1 {public static void main(Strin…

java 根据类名示例化类_Java类类getEnclosingClass()方法及示例

java 根据类名示例化类类的类getEnclosingClass()方法 (Class class getEnclosingClass() method) getEnclosingClass() method is available in java.lang package. getEnclosingClass()方法在java.lang包中可用。 getEnclosingClass() method is used to return recent or im…

C++:cin.getline

转&#xff1a;百度百科 http://baike.baidu.com/view/2383876.htm cin.getline 此函数是按行读取,其语法为:cin.getline(字符指针,字符个数N,结束符); 功能是&#xff1a;一次读取多个字符(包括空白字符&#xff09;&#xff0c;直到读满N-1个&#xff0c;或者遇到指定的结束符…

端口复用和重映射--STM32F103

什么是端口复用&#xff1f; STM32中有很多内置外设&#xff0c;这些外设的引脚都是与GPIO复用的&#xff0c;什么时候复用呢&#xff1f;就是当一个GPIO作为内置外设引脚使用时&#xff0c;就叫做复用。比如串口1的发送接收引脚是PA9&#xff0c;PA10&#xff0c;当PA9&#…

考研数学

眼前俨然一副冬的气象&#xff0c;伴随气温的骤降&#xff0c;考研复习也进入异常紧张的阶段。在考试前这两个月里&#xff0c;考生如何复习数学&#xff0c;成绩还可以有所提高。万学?海文数学教研组针对冲刺阶段数学复习归纳总结以下复习经验和建议&#xff0c;供大家参考。…

一个很好的自学网站~推荐一下

http://www.51zxw.net/study.asp?vip15746908

[转]Ubuntu远程桌面登陆

原文地址&#xff1a;http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html 1.xp下默认的远程桌面协议是rdp&#xff0c;默认端口3389&#xff0c;而ubuntu用的时vnc&#xff1a;默认端口5900 2.首先被访问的主机&#xff08;windows/linux&#xff09;都要设置为允…

NVIC中断管理---STM32

NVIC&#xff1a;嵌套向量中断控制器 在了解中断之前&#xff0c;我们先了解抢占优先级和响应优先级 抢占优先级和响应优先级 抢占优先级决定能不能打断&#xff0c;高优先级的抢占可以中断低优先级的抢占响应优先级在抢占优先级相同时&#xff0c;高响应优先级先执行&#x…

Java BigDecimal stripTrailingZeros()方法与示例

BigDecimal类stripTrailingZeros()方法 (BigDecimal Class stripTrailingZeros() method) stripTrailingZeros() method is available in java.math package. stripTrailingZeros()方法在java.math包中可用。 stripTrailingZeros() method is used to get a BigDecimal that is…

外部中断---STM32F1

外部中断概述 STM32的中断控制器支持19个外部中断/事件请求&#xff1a; 线0-15&#xff1a;对应外部IO口的输入中断线16&#xff1a;连接到PVD输出线17&#xff1a;连接到RTC闹钟事件线18&#xff1a;连接到USB唤醒事件 STM32每个IO口都有可以作为外部中断输入&#xff0c;…

转:点9图

关于”点九” 转&#xff1a;http://mux.baidu.com/?p1506“点九”是andriod平台的应用软件开发里的一种特殊的图片形式&#xff0c;文件扩展名为&#xff1a;.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向…

Python HTMLCalendar类| 带实例的formatyear()方法

Python HTMLCalendar.formatyear()方法 (Python HTMLCalendar.formatyear() Method) formatyear() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns an HTML table consisting of th…

2009中国企业家新春联谊会

2009中国企业家新春联谊会——把握当前机遇&#xff0c;笑对经济危机&#xff0c;畅饮将帅美酒尊敬的嘉宾&#xff1a;当前&#xff0c;国际形势正在发生深刻而复杂的变化&#xff0c;由美国次贷危机引发的全球经济危机已经愈演愈烈&#xff0c;美国前五大投资银行有3家宣告破产…

串口通信的基本原理----STM32

串口通信基本原理 1. 处理器与外部设置通信的基本方式 并行通信&#xff1a;数据各个位同时传输串行通信&#xff1a;数据按位顺序传输 在串行通信中&#xff0c;按照数据的传输方向&#xff0c;又分为&#xff1a; 单工&#xff1a;数据传输只支持在一个方向传输半双工&am…

java获取vm运行参数_如何获取在Java中运行Java VM的版本?

java获取vm运行参数To get the version of running VM (Virtual Machine) in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the version of running Java VM. 要获取Java…