`
miaoge
  • 浏览: 107539 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

【Socket网络通信】写一个服务器(客户端)可以接收客户端(服务器)的数据,并可以把数据保存在“name-yyyy-MMM-dd.txt”的文件中

阅读更多

服务器:

 

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author $KangMiao$
 * 1、写个服务器可以接受客户端的数据,并可以把客户端的输入的数据,保存在电脑上,
 * 并以 “name-yyyy-MMM-dd.txt”格式命名。其中 ,name为客户端的主机名字,后面的为时间格式。 
 */

public class NetCopyServer01 {
	private final String file = "e:/peixun/test/";
	
	public void talk() {
		try {
			ServerSocket ss = new ServerSocket(8888);  
			System.out.println("服务器开启···");
			Socket s = null;
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			while ((s = ss.accept()) != null) {
				//获得客户端的主机名(s.getInetAddress()方法是活的客户端IP地址)
				String fileName = s.getInetAddress().getHostName();
				//拼接成保存客户端数据的文件名
				fileName = file+fileName + "-" + df.format(new Date()) + ".txt";
				System.out.println(fileName);
				ServerThread st = new ServerThread(s,fileName);
				st.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		NetCopyServer01 ncs = new NetCopyServer01();
		ncs.talk();
	}
}
	
	
class ServerThread extends Thread{
	private Socket s;
	private String fileName;   //写入客户端数据的文件名
	
	public ServerThread(Socket s,String fileName) {
		super();
		this.s = s;
		this.fileName = fileName;
	}

	public void run() {
		BufferedReader br = null;
	    RandomAccessFile out = null;
	    PrintStream ps = null;
		try {
			// 从客户端读取数据的流
			br = new BufferedReader(new InputStreamReader(s
					.getInputStream()));
			out = new RandomAccessFile(fileName,"rw");
			ps = new PrintStream(s.getOutputStream()); // 向客户端输入数据的流
			ps.println("欢迎你,请输入数据···");
			out.seek(new File(fileName).length());
			String temp = null;
			while ((temp = br.readLine())!=null ){
				if( "quit".equalsIgnoreCase(temp)){
					ps.println("与服务器断开链接,你输入的数据已保存在服务器上的"+fileName+"文件中");
					break;
				}
				out.writeUTF(temp);
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				br.close();
				out.close();
				ps.close();
				System.out.println(s.getInetAddress()+"退出!");
				s.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
}

 

客户端:

客户端用到的测试服务器只需改下上面的run()方法中部分代码如下:

这里其实可以写到一起,也就是双向通信,可以参考我的另一篇双向聊天的文章。

 

try {
   // 从控制台读取数据的流
    br = new BufferedReader(new InputStreamReader(System.in);
    ps = new PrintStream(s.getOutputStream()); // 向客户端输入数据的流
    ps.println("欢迎你,服务器正在输入数据···");
   String temp = null;
   while ((temp = br.readLine())!=null ){
    if( "quit".equalsIgnoreCase(temp)){
       ps.println("服务器数据输入完成!!!");
       break;
    }
    out.writeUTF(temp);
   }

 

客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.RandomAccessFile;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author $KangMiao$
 * 1、写个客户端可以接受服务器的数据,并可以把服务器的输入的数据,保存在电脑上,
 * 并以 “name-yyyy-MMM-dd.txt”格式命名。其中 name为客户端的主机名字,后面的为时间格式。
 */

public class NetCopyClient01 {
	private String file =  "e:/peixun/test/client/";
	
	public void getFile() {
		Socket s = null;
		BufferedReader br = null;
		PrintStream ps = null;    //网络输出流
		RandomAccessFile out = null;
		try {
			s = new Socket("localhost",8888);
			System.out.println("已连接服务器,正在读取数据···");
			br = new BufferedReader(new InputStreamReader(s.getInputStream()));
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			//获得服务器的主机名(s.getInetAddress()方法是活的服务器IP地址)
			String fileName = s.getInetAddress().getHostName();
			//拼接成保存服务器数据的文件名
			fileName = file+fileName + "-" + df.format(new Date()) + ".txt";
			out = new RandomAccessFile(fileName,"rw");
			String temp = "";
			while ((temp = br.readLine())!= null ) {
				if (temp.equalsIgnoreCase("quit")) {
					ps.println("与客户端断开链接,你输入的数据已保存在客户端的"+fileName+"文件中!");
					System.out.println("服务端与你断开连接!");
					break;
				}
				out.writeUTF(temp);
				System.out.println("服务端:" +temp);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				br.close();
				out.close();
				ps.close();
				s.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		NetCopyClient01 ftp = new NetCopyClient01();
		ftp.getFile();
	}
}

 

分享到:
评论

相关推荐

    Java网络编程(第三版)中文版.part11.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part06.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)高清中文版.part01.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part07.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part09.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part01.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part03.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part02.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part04.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part10.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part13.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part05.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part12.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Java网络编程(第三版)中文版.part08.rar

    本书有很多示例,包含了几千行可以实际工作的代码(所有代码都可以在线获得),实现了功能完整的网络客户端和服务器。无论是希望编写特殊用途的web服务器、安全的在线订单接收程序、简单的组播代理还是电子邮件...

    Android实验七.doc

    s 计算机科学与技术系 实 验 报 告 专业名称 计算机科学与技术 课程名称 Android嵌入式软件开发 项目名称 网络数据与服务 班 级 学 号 姓 名 同组人员 无 实验日期 2016.10.18 一、实验目的与要求: 【实验目的】 ...

    基于java的局域网聊天系统-毕业设计.doc

    图2 面向连接的SOCKET编程模型 图3 面向非连接的SOCKET编程模型 Windows Sockets规范中定义了一个新的数据类型 SOCKET,这一类型的定义对于将来Windows Sockets规范的升级是必要的。这一类型的定义保证了应用程序向...

    c# 加密和解密相关代码

    在第一个GroupBox 中放入3 个TextBox 控件和一个Button 按钮,分别用于输入数字、输入加密数字、显示加 密后的数字和计算加密信息;在第二个GroupBox 中放入一个TextBox 控件和一个Button 按钮,分别用于显示 解密后...

    C#聊天程序

    /// 接收数据缓冲区大小64K /// private const int _maxPacket = 64 * 1024; /// /// 服务器端的监听器 /// private TcpListener _tcpl = null; /// /// 保存所有客户端会话的哈希表 /// private...

    C#全能速查宝典

    分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用的属性、方法、类和各种技术,...

Global site tag (gtag.js) - Google Analytics