`

多线程+socket实现简单server和client操作唯一文本

    博客分类:
  • io
阅读更多
package server;

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

public class MarsServer extends Thread {
	public static final int PORT = 8765;
	public static final String book = "autobiography.txt";
	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;
	private static PrintWriter fileOut;

	public MarsServer(Socket s) throws IOException {
		socket = s;
		InputStream socketInput = socket.getInputStream();
		InputStreamReader socketReader = new InputStreamReader(socketInput);
		in = new BufferedReader(socketReader);

		OutputStream socketOutput = socket.getOutputStream();
		OutputStreamWriter socketWriter = new OutputStreamWriter(socketOutput);
		BufferedWriter bufferedWriter = new BufferedWriter(socketWriter);
		out = new PrintWriter(bufferedWriter, true);

		start();
	}

	public void run() {
		while (true) {
			try {
				String str = in.readLine();
				if (str.equals("q"))
					break;
					fileOut.println(str);
				out.println("server send:" + str);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println("closing socket...");
		
		try {
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws IOException {
		ServerSocket s = new ServerSocket(PORT);
		System.out.println("[server]");
		System.out.println("Started: " + s);
		System.out.println("Server Started");
		try {
			FileWriter fileWriter = new FileWriter(book);
			BufferedWriter bufferedFileWriter = new BufferedWriter(fileWriter);
			fileOut = new PrintWriter(bufferedFileWriter, true);
			while (true) {
				Socket socket = s.accept();
				try {
					new MarsServer(socket);
				} catch (IOException e) {
					socket.close();
				}
			}
		} finally {
			fileOut.close();
			
			System.out.println("closing ServerSocket...");
			s.close();
		}
	}
}

 

package client;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

import server.MarsServer;

public class MarsClient extends Thread {
	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;
	private String id;

	public MarsClient(InetAddress addr, String id) throws IOException {
		this.id = id;
		System.out.println("Making client " + id);
		socket = new Socket(addr, MarsServer.PORT);
		in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
		start();
	}

	public void run() {
		try {
			for (int i = 0; i < 100; i++) {
				out.println("Client " + id + ": " + i);
				String str = in.readLine();
				System.out.println(str);
			}
			out.println("q");
		} catch (IOException e) {
			System.out.println(e);
		}
	}

	static final int MAX_THREADS = 2;

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

		InetAddress addr = InetAddress.getByName(null);
		System.out.println("[client]");
		System.out.println("addr = " + addr);

		new MarsClient(addr, 1 + "");
		//Thread.sleep(100);
		new MarsClient(addr, 2 + "");

	}
}

 

0
0
分享到:
评论

相关推荐

    UE4 TCP-UDP Socket Client-Server Helper

    创建TCP客户端或服务器套接字 ...多线程实现提高性能 支持文本和字节消息 异步节点可快速简单地使用 网络实用程序节点 此插件公开节点以处理套接字通信(TCP和UDP) 您可以使用此插件创建客户端或服务器 可用于任何蓝图

    java一个简单的即时通讯工具的设计与开发.rar

    设计与开发一个简单的即时通讯工具,可以采用客户端/服务器(Client/Server)架构,基于Java语言进行实现。以下是该工具的设计与开发描述: 功能需求: 用户注册与登录:用户可以注册新账号,并使用已有账号进行...

    java jdk实列宝典 光盘源代码

    一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; ...

    java源码包---java 源码 大量 实例

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    java源码包2

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    java源码包3

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    java源码包4

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    JAVA上百实例源码以及开源项目

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    vc实例精通源码,windows基本控件的使用Demo

    示例描述:本章学习Windows线程的创建和管理方法。 01_PrimeNumberFinder 主线程和用户界面。 02_PrimeNumberFinderEx 创建和结束线程。 03_PrimeNumberFinal 用临界区对象同步线程。 04_BigPrimeNumber 用...

    c# 加密和解密相关代码

    序中判断是否为数字的方法有很多种,可以使用正则表达式、int.Parse 方法和double.Parse 方法等。下面的代码 通过double.Parse 方法判断textBox1 文本框中的输入是否为数字。 double.Parse(textBox1.Text); 实例573 ...

    openssl编程

    31.8 多线程支持 258 31.9 编程示例 259 31.10 函数 270 第三十二章 Openssl命令 272 32.1概述 272 32.2 asn1parse 272 32.3 dgst 274 32.4 gendh 275 32.5 passwd 276 32.6 rand 276 32.7 genrsa 277 32.8 req 278 ...

    openssl 编程 当前版本

    31.8 多线程支持 258 31.9 编程示例 259 31.10 函数 270 第三十二章 Openssl命令 272 32.1概述 272 32.2 asn1parse 272 32.3 dgst 274 32.4 gendh 275 32.5 passwd 276 32.6 rand 276 32.7 genrsa 277 32.8 req 278 ...

Global site tag (gtag.js) - Google Analytics