Java基础知识网络编程(TCP练习)
2016-05-10 13:38
751 查看
练习:复制文本
练习要求:把客户端的一个文件内容发到服务端,在服务端把数据存储到一个文件当中。相当于复制文件。import java.io.*; import java.net.*; class TxtCopyTestClient { public static void main(String[] args) throws Exception { Socket s=new Socket("192.168.1.6",10003); BufferedReader bur=new BufferedReader(new InputStreamReader(new FileInputStream("client.txt"))); //BufferedWriter buwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter pw=new PrintWriter(s.getOutputStream(),true); String line=null; while((line=bur.readLine())!=null) { pw.println(line); } s.shutdownOutput(); BufferedReader burIn=new BufferedReader(new InputStreamReader(s.getInputStream())); String str=burIn.readLine(); System.out.println(str); bur.close(); s.close(); } } class TxtCopyTestServer { public static void main(String[] args) throws Exception { ServerSocket ss=new ServerSocket(10003); Socket s=ss.accept(); BufferedReader burIn=new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter pw=new PrintWriter(new FileOutputStream("server.txt"),true); String line=null; while((line=burIn.readLine())!=null) { pw.println(line); } pw.close(); PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true); pwOut.println("上传成功"); s.close(); ss.close(); } }
练习2:上传图片
import java.io.*; import java.net.*; class PicClient { public static void main(String[] args) throws Exception { Socket s=new Socket("192.168.1.114",10003); FileInputStream fis=new FileInputStream("pictest.jpg"); OutputStream os=s.getOutputStream(); byte[] buf=new byte[1024]; int len=0; while((len=fis.read(buf))!=-1) { os.write(buf,0,len); } s.shutdownOutput(); InputStream is=s.getInputStream(); byte[] re=new byte[1024]; int length=is.read(re); String str=new String(re,0,length); System.out.println(str); fis.close(); s.close(); } } class PicServer { public static void main(String[] args)throws Exception { ServerSocket ss=new ServerSocket(10003); Socket s=ss.accept(); InputStream is=s.getInputStream(); FileOutputStream fos=new FileOutputStream("serverpic.jpg"); byte[] buf=new byte[1024]; int len=0; while((len=is.read(buf))!=-1) { fos.write(buf,0,len); } OutputStream os=s.getOutputStream(); os.write("上传成功".getBytes()); s.close(); ss.close(); } }
练习3:客户端并发上传图片
import java.io.*; import java.net.*; class UploadByThreadClient { 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.114",10003); FileInputStream fis = new FileInputStream("pictest.jpg"); 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(new String(bufIn,0,num)); fis.close(); s.close(); } } class UploadByThreadServer { public static void main(String[] args) throws Exception { ServerSocket ss=new ServerSocket(10003); while(true) { Socket s=ss.accept(); new Thread(new AcceptThread(s)).start(); } } } class AcceptThread implements Runnable { private Socket s; AcceptThread(Socket s) { this.s=s; } public void run() { try { InputStream in = s.getInputStream(); String ip=s.getInetAddress().getHostAddress(); int count=1; File def=new File(ip+"("+count+")"+".jpg"); while(def.exists()) { def=new File(ip+"("+(count++)+")"+".jpg"); } FileOutputStream fos = new FileOutputStream(def); 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(); } catch (Exception e) { throw new RuntimeException("上传失败"); } } }
练习4:客户端并发登陆
import java.io.*; import java.net.*; class LoginClient { public static void main(String[] args)throws Exception { Socket s=new Socket("192.168.1.6",100010); BufferedReader bur=new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw=new PrintWriter(s.getOutputStream(),true); BufferedReader burIn=new BufferedReader(new InputStreamReader(s.getInputStream())); for(int i=0;i<3;i++) { String user=bur.readLine(); if(user==null) break; pw.println(user); String info=burIn.readLine(); System.out.println("反馈信息为:"+info); if(info.contains("欢迎")) { System.out.println("登陆成功"); break; } } bur.close(); s.close(); } } class LoginServer { public static void main(String[] args) throws Exception { ServerSocket ss=new ServerSocket(100010); while(true) { Socket s=ss.accept(); System.out.println("连接成功"); new Thread(new UserLoginThread(s)).start(); } } } class UserLoginThread implements Runnable { private Socket s; UserLoginThread(Socket s) { this.s=s; } public void run() { try { BufferedReader burIn=new BufferedReader(new InputStreamReader(s.getInputStream())); for(int i=0;i<3;i++) { String user=burIn.readLine(); System.out.println("发送来的用户名:"+user); if(user==null) { System.out.println("为空"+user); break; } BufferedReader bur=new BufferedReader(new FileReader("user.txt")); String line=null; boolean flag=false; while((line=bur.readLine())!=null) { System.out.println("搜索到的用户名:"+line); if(line.equals(user)) { flag=true; break; } } if(flag) { PrintWriter pw=new PrintWriter(s.getOutputStream(),true); pw.println(user+"欢迎您!"); s.close(); break; } else { PrintWriter pw=new PrintWriter(s.getOutputStream(),true); pw.println("请输入正确的用户名"); } bur.close(); } s.close(); } catch (Exception e) { throw new RuntimeException("登陆失败"); } } }
相关文章推荐
- <转>——网络爬虫
- 网络编程知识(6)--用Java编写HTTP服务器
- Linux下网络故障诊断
- Unix网络编程之UDP实例
- git https 403
- Java之------socket系列(四)TCP
- CNN卷积神经网络(一)
- TCP/IP详解(二)---数据链路层、MTU
- java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)
- 《Nodejs开发加密货币》之八:一个精巧的p2p网络实现
- Android网络应用——疯狂android讲义笔记
- 各种HTTP错误消息含义
- android 使用Http的POST方式读取网络数据
- RBF神经网络与BP神经网络的比较
- 网络请求工具类
- 基于BP神经网络的简单字符识别算法自小结(C语言版)
- 转 Linux C 网络编程——多线程的聊天室实现(服务器端)
- TCP/IP详解(一)---入门知识
- Python网络编程06----django数据库的增删改查
- 图解http协议头实例分析