示例一:

package cn.itcast.net.p5.tcptest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TransClient {

/**
  * @param args
  * @throws IOException
  * @throws UnknownHostException
  */
 public static void main(String[] args) throws UnknownHostException, IOException {

/*
   * 思路:
   * 客户端:
   * 1,需要先有socket端点。
   * 2,客户端的数据源:键盘。
   * 3,客户端的目的:socket.
   * 4,接收服务端的数据,源:socket。
   * 5,将数据显示在打印出来:目的:控制台.
   * 6,在这些流中操作的数据,都是文本数据。
   *
   *
   * 转换客户端:
   * 1,创建socket客户端对象。
   * 2,获取键盘录入。
   * 3,将录入的信息发送给socket输出流。
   */
  
  //1,创建socket客户端对象。
  Socket s = new Socket("192.168.1.100",10004);
  
  //2,获取键盘录入。
  BufferedReader bufr  =
    new BufferedReader(new InputStreamReader(System.in));
  
  //3,socket输出流。
//  new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  
  
  //4,socket输入流,读取服务端返回的大写数据
  BufferedReader bufIn  = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  String line = null;
  
  while((line=bufr.readLine())!=null){
   
   if("over".equals(line))
    break;
   
//   out.print(line+"\r\n");
//   out.flush();
   out.println(line);
   
   //读取服务端发回的一行大写数。
   String upperStr = bufIn.readLine();
   System.out.println(upperStr);
  }
  
  s.close();
  
 }

}

package cn.itcast.net.p5.tcptest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TransServer {

/**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {

/*
   *
   * 转换服务端。
   * 分析:
   * 1,serversocket服务。
   * 2,获取socket对象。
   * 3,源:socket,读取客户端发过来的需要转换的数据。
   * 4,目的:显示在控制台上。
   * 5,将数据转成大写发给客户端。
   */
  
  //1,
  ServerSocket ss = new ServerSocket(10004);
  
  //2,获取socket对象。
  Socket s = ss.accept();
  
  //获取ip.
  String ip = s.getInetAddress().getHostAddress();
  System.out.println(ip+"......connected");
  
  //3,获取socket读取流,并装饰。
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  //4,获取socket的输出流,并装饰。
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  
  String line = null;
  while((line=bufIn.readLine())!=null){
   
   System.out.println(line);
   out.println(line.toUpperCase());
//   out.print(line.toUpperCase()+"\r\n");
//   out.flush();
  }
  
  s.close();
  ss.close();
  
 }

}

示例二:

package cn.itcast.net.p6.uploadtext;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadClient {

/**
  * @param args
  * @throws IOException
  * @throws UnknownHostException
  */
 public static void main(String[] args) throws UnknownHostException, IOException {

System.out.println("上传客户端。。。。。。");
  
  File file = new File("c:\\client.txt");
  System.out.println(file.exists());
  
  
  //1
  Socket s = new Socket("192.168.1.100",10005);
  
  //2
  BufferedReader bufr =
    new BufferedReader(new FileReader(file));
  
  //3,
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  
  
  String line = null;
  while((line=bufr.readLine())!=null){
   
   out.println(line);
  }
  
  //告诉服务端,客户端写完了。
  s.shutdownOutput();
//  out.println("!@#$%^&*(");
  
  //4,
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  String str = bufIn.readLine();
  System.out.println(str);
  
  bufr.close();
  s.close();
  
 }

}

package cn.itcast.net.p6.uploadtext;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadServer {

/**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  System.out.println("上传服务端。。。。。。。。。");
  
  //1
  ServerSocket ss = new ServerSocket(10005);
  
  //2,
  Socket s = ss.accept();
  
  System.out.println(s.getInetAddress().getHostAddress()+".....connected");
  
  //3,
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  //4,
  BufferedWriter bufw = new BufferedWriter(new FileWriter("c:\\server.txt"));
  
  String line = null;
  
  while((line=bufIn.readLine())!=null){
   
//   if("over".equals(line))
//    break;
   bufw.write(line);
   bufw.newLine();
   bufw.flush();
  }
  
  
  PrintWriter out = new PrintWriter(s.getOutputStream(),true);
  out.println("上传成功");
  
  bufw.close();
  
  s.close();
  ss.close();
  
  
 }

}

示例三:

package cn.itcast.net.p1.uploadpic;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadPicClient {

/**
  * @param args
  * @throws IOException
  * @throws UnknownHostException
  */
 public static void main(String[] args) throws UnknownHostException, IOException {

//1,创建客户端socket。
  Socket s = new Socket("192.168.1.100",10006);
  
  //2,读取客户端要上传的图片文件。
  FileInputStream fis = new FileInputStream("c:\\0.bmp");
  
  //3,获取socket输出流,将读到图片数据发送给服务端。
  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 lenIn = in.read(buf);
  String text = new String(buf,0,lenIn);
  System.out.println(text);
  
  fis.close();
  s.close();
  
  
  
  
 }

}

package cn.itcast.net.p1.uploadpic;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadPicServer {

/**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
   
  //创建tcp的socket服务端。
  ServerSocket ss = new ServerSocket(10006);
  
  while(true){
   Socket s = ss.accept();   
   
   new Thread(new UploadTask(s)).start();  
   
  }
  //获取客户端。
  
  
//  ss.close();
  
  
 }

}

package cn.itcast.net.p1.uploadpic;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class UploadTask implements Runnable {

private static final int SIZE = 1024*1024*2;
 private Socket s;

public  UploadTask(Socket s) {
  this.s = s;
 }

@Override
 public void run() {

int count = 0;
  String ip = s.getInetAddress().getHostAddress();
  System.out.println(ip + ".....connected");
  
  try{

// 读取客户端发来的数据。
  InputStream in = s.getInputStream();

// 将读取到数据存储到一个文件中。
  File dir = new File("c:\\pic");
  if (!dir.exists()) {
   dir.mkdirs();
  }
  File file = new File(dir, ip + ".jpg");
  //如果文件已经存在于服务端
  while(file.exists()){
   file = new File(dir,ip+"("+(++count)+").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);
   
   if(file.length()>SIZE){
    System.out.println(ip+"文件体积过大");
    
    fos.close();
    s.close();
    
    
    System.out.println(ip+"...."+file.delete());
    
    return ;
   }
  }

// 获取socket输出流,将上传成功字样发给客户端。
  OutputStream out = s.getOutputStream();
  out.write("上传成功".getBytes());

fos.close();
  s.close();
  }catch(IOException e){
   
  }

}

}

java Socket Tcp示例三则(服务端处理数据、上传文件)的更多相关文章

  1. Android端通过HttpURLConnection上传文件到服务器

    Android端通过HttpURLConnection上传文件到服务器 一:实现原理 最近在做Android客户端的应用开发,涉及到要把图片上传到后台服务器中,自己选择了做Spring3 MVC HT ...

  2. Android端通过HttpURLConnection上传文件到server

    Android端通过HttpURLConnection上传文件到server 一:实现原理 近期在做Androidclient的应用开发,涉及到要把图片上传到后台server中.自己选择了做Sprin ...

  3. 实验09——java基于TCP实现客户端与服务端通信

    TCP通信         需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手        底层通过 流 发送数据 数据没有大小限制        可靠的传输机制 - 丢包重发 包的顺序的 ...

  4. ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上传目录的尺寸限制

    我曾经试过使用JSAjaxFileUploader插件来把文件.照片以异步的方式上传,就像"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01- ...

  5. 【温故知新】Java web 开发(三)Form表单与上传下载文件

    简介:在一和二的基础之上,这次来记录下如何在页面提交表单数据,以及文件的上传和下载整个流程,请求也不仅限于GET了,也有POST了. 1. 为了方便,在 webapp 下直接新建一个 index.ht ...

  6. 那些年的 网络通信之 TCP/IP 传输控制协议 ip 加 端口 客户端上传文件到服务器端服务器端返回上传成功消息

    多线程开启, 客户端通过 Socket 流 上传文件到服务端的一个小程序练习. 1. 抓住阻塞式方法,去调试 2. 获取对应流对象操作对应的对象 这时候自己不能懵,一定要清晰,最好命名就能区别,一搞混 ...

  7. Springboot第三篇:与前端fetch通信(关于前端传输json数据上传文件等等前后端的处理)

    关于前端接口传递的方法,推荐按以下使用: 若要在服务器上创建资源,推荐使用POST方法 若要检索某个资源,推荐使用GET方法 若要更新资源,推荐使用PUT方法 若要删除某个资源,推荐使用DELETE方 ...

  8. java Socket通信,客户端与服务端相互发消息

    1.通信过程 网络分为应用层,http.ssh.telnet就是属于这一类,建立在传输层的基础上.其实就是定义了各自的编码解码格式,分层如下: 2.Socket连接 上述通信都要先在传输层有建立连接的 ...

  9. CentOS 使用SMB服务 让windows能够上传文件

    1. 新增加用户 useradd zhaobsh 2. 使用 pdbedit的方式新增加用户 pdbedit -a -u zhaobsh 3. 修改smb服务 systemctl restart sm ...

随机推荐

  1. 再次理解多线程线程安全问题(理解java内存模型后)

    1.多线程访问的共享资源存在线程安全问题, 无外乎访问两种共享资源. 1)多线程访问方法区数据.存在线程安全问题,通过加锁 2)多线程访问实例变量:被访问对象是单例时存在线程安全,被访问对象是多例时, ...

  2. ndk 开发

    5.用NDK来编译程序 1.  现在我们用安装好的NDK来编译一个简单的程序吧,我们选择ndk自带的例子hello-jni,我的位于E:/android-ndk-r5/samples/hello-jn ...

  3. 微软企业库Unity学习笔记

    本文主要介绍: 关于Unity container配置,注册映射关系.类型,单实例.已存在对象和指出一些container的基本配置,这只是我关于Unity的学习心得和笔记,希望能够大家多交流相互学习 ...

  4. 【BZOJ】【2850】【Violet 0】巧克力王国

    KD-Tree 问平面内在某条直线下方的点的权值和 我一开始yy的是:直接判这个矩形最高的两个点(y坐标的最大值)是否在这条直线下方就可以了~即判$A*x+B*y<C$... 然而这并不对啊…… ...

  5. 单点登录(SSO)问题

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.

  6. otl中遇到的一些字符数组长度问题

    最近做的项目中对于数据库的操作为了有一个统一的操作,所以采用了otl技术作为中间媒介,当然,由于是用了别人的库,所以还是出现了很多问题.通过对问题进行分析,也形成了一些常用问题的处理方法. 在用otl ...

  7. elimination-game

    https://leetcode.com/problems/elimination-game/ // 一行代码就可以,不过原理有些复杂 // https://discuss.leetcode.com/ ...

  8. 把表单转成json,并且name为key,value为值

    http://jsfiddle.net/sxGtM/3/http://stackoverflow.com/questions/1184624/convert-form-data-to-js-objec ...

  9. 谈谈javascript的函数作用域

    在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取 ...

  10. 在C#中使用属性控制 XML 序列化来解析XML

    今天需要解析一个XML,这个XML和一般情况用.NET的序列化出来的格式不太一样. 我就又补习了一下. 分享一下学习成果吧. 示例代码下载: http://download.csdn.net/deta ...