java-socket-编程练习题

TCP传输练习题

最简单的tcp传输demo

客户端:

public class TCPTransferClient {
 
 public static void main(String[] args) throws IOException, IOException {

  Socket s=new Socket("192.168.174.1",10086);
  OutputStream out =s.getOutputStream();
  out.write("tcp传输演示---客户端:你好,我来了".getBytes());
  s.close();
 }

}

服务端:

public class TCPTransferServer {

 public static void main(String[] args) throws IOException {
  ServerSocket ss=new ServerSocket(10086);
  //获取客户端socket
  Socket s =ss.accept();
  InputStream in=s.getInputStream();
  
  byte[] buf=new byte[1024];
  int len = in.read(buf);
  String str=new String(buf,0,len);
  System.out.println(s.getInetAddress().getHostAddress()+"\t"+"客户端输出:"+str);
  ss.close();
 }

}

需求一:客户端输入字母发送给服务端,服务端收到后显示在控制台上,并将数据转成大写返回给客户端,直到客户端输入over,转换结束

客户端:

public class TestTextTransClient {
 /**
  * 思路:
  * 1、创建socket客户端对象  2、获取键盘录入
  * 3、通过socket获取输出流,将录入的信息发送给socket输出流
  * 4、通过socket获取输入流,获取服务端的响应信息
  */
 public static void main(String[] args) throws IOException {
  //1、创建客户端对象
  Socket s= new Socket("192.168.174.1",10086);
  //2、获取键盘录入
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
  //3、socket输出流
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  
  //4、获取服务器端返回的大写数据
  BufferedReader readerByServer = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  String line=null;
  while((line=bufferedReader.readLine()) != null){
   if("over".equals(line)){
    break;
   }
   out.println(line);
   //读取服务端发回的一行大写数据
   String str=readerByServer.readLine();
   System.out.println(str);
  }
  s.close();
  
 }
}

服务端:

public class TestTextTransServer {

 /**
  * 服务端思路
  * 1、创建服务端服务对象serverSocket
  * 2、获取客户端socket对象
  * 3、通过客户端对象,读取客户端发送的数据
  * 4、将数据大写输出到控制台上
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  ServerSocket s = new ServerSocket(10086);
  Socket ss = s.accept();
  String ip=ss.getInetAddress().getHostAddress();
  System.out.println(ip+"..........connected");
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ss.getInputStream()));
  PrintWriter out = new PrintWriter(ss.getOutputStream(),true);
  String line = null;
  while((line=bufferedReader.readLine())!=null){
   System.out.println("读取到客户端数据是:"+line);
   out.println("将客户端数据转成大写为:"+line.toUpperCase());
  }
  
  ss.close();
  s.close();
 }
}

需求二: 上传文件

客户端:

public class TestUploadTextClient {

 public static void main(String[] args) throws IOException, IOException {
  System.out.println("客户端上传文件........");
  String path="D:"+File.separator+"list.txt";
  File file = new File(path);
  
  Socket socket = new Socket("192.168.174.1",10023);
  BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
  PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
  
  String line = null;
  while((line=bufferedReader.readLine())!=null){
   out.println(line);
  }
  
  //告诉服务端,客户端已将文件写完了
  socket.shutdownOutput();
  //得到服务端的回应
  BufferedReader bufReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  String response = bufReader.readLine();
  System.out.println("服务端回复:"+response);
  
  bufferedReader.close();
  socket.close();
 }

}

服务端:

public class TestUploadTextServer {

 public static void main(String[] args) throws IOException {
  System.out.println("请选择要上传的文件到服务端。。。。。。。。。。。");
  ServerSocket ss = new ServerSocket(10023);
  
  Socket s = ss.accept();
  System.out.println(s.getInetAddress().getHostAddress()+"......connected");
  
  BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));
  String path="e:"+File.separator+"server.txt";
  BufferedWriter bufw = new BufferedWriter(new FileWriter(new File(path)));
  
  String line = null;
  while((line=bufr.readLine())!=null){
   bufw.write(line);
   bufw.newLine();
   bufw.flush();
  }
  //回应客户端读写完成情况
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  //必须加换行true,要么数据无法自动刷新到socket流中,客户端读取不到数据,阻塞
  out.println("上传成功");
  //必须是println方法,要么客户端readline方法接收不到换行标记,会堵塞
  
  //不是所有的流都需要关闭
  bufw.close();
  ss.close();
 }

}

需求三:上传图片

跟上传文件的思路一致

客户端:

public class TestUploadPicClient {

 public static void main(String[] args) throws IOException, IOException {
  System.out.println("开启客户端,开始上传图片");
  Socket s = new Socket("192.168.174.1",10088);
  String picPath="d:"+File.separator+"DSCF4505A.jpg";
  BufferedInputStream bufin=new BufferedInputStream(new FileInputStream(new File(picPath)));
  BufferedOutputStream bufout = new BufferedOutputStream(s.getOutputStream());
  int len=0;
  while((len=bufin.read())!=-1){
   bufout.write(len);
  }
  
  s.shutdownOutput();
  
  InputStream in = s.getInputStream();
  byte[] buf = new byte[1024];
  int lens=in.read(buf);
  String text =new String(buf,0,lens);
  System.out.println(text);
  
  bufin.close();
  s.close();
 }

}

服务端:

public class TestUploadPicServer {

 public static void main(String[] args) throws IOException {
  System.out.println("服务端已启动,请选择上的图片");
  ServerSocket ss=new ServerSocket(10088);
  Socket s =ss.accept();
  String ip=s.getInetAddress().getHostAddress();
  System.out.println(ip+"...........connected");
  InputStream in=s.getInputStream();
  String picPath="d:"+File.separator+"123";
  File dir = new File(picPath);
  if(!dir.exists()){
   dir.mkdirs();
  }
  File file = new File(dir,ip+".jpg");
  FileOutputStream fos=new FileOutputStream(file);
  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();
  ss.close();
 }

}

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值