Java Socket 多线程编程,处理百万级的数据并发。

感谢网上的大神分享的代码,然后我根据我们项目的需求,组装成余下代码,基本上大概的框架就是这个模式,需要修改的就是业务数据的传递 ,其他的都是不用修改的。

本着学习他人代码,学会他人分享精神,因此将我花了两天研究的代码分享出来(晚上的时间)。希望有大神多多指教我这个编程菜鸟的技术,本菜鸟感激不敬。

ServerSocket :

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.ServerSocket;
import java.net.Socket;
import java.nio.Buffer;

public class TalkServer {

	public static void main(String[] args) throws IOException{
		ServerSocket server = new ServerSocket(5203);
		while(true){
			Socket socket = server.accept();
			exSocketServer(socket);
		}
	}
	public static void exSocketServer(final Socket socket){

		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				BufferedReader in = null;
				PrintWriter out = null;
				try {
					in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					out=new PrintWriter(socket.getOutputStream());
					while(true){
						String msg =in.readLine();
						if(msg == null){
							break;
						}
						System.out.println("Client :"+msg);
						//返回消息给客户端。
						out.println("OK !");
						out.flush();

					}
				}catch(Exception e){
					//e.printStackTrace();
					System.out.println("Error:"+e);
				}finally {
					try {
						in.close();
						out.close();
						socket.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

				}

			}
		}).start();
	}
}

客户A端的代码:

import java.io.*;

import java.net.*;

public class TalkClient {

			public static void main(String args[]) {
				String rootPath=TalkClient.class.getResource("/").getFile().toString();
		    	String fileName =rootPath+"Initialize.txt";

					String file = "my name is YI! nice to meet you";//ReadFromFile.readFileByLinesln(fileName);
					exSocket(file);
		}

			public static void exSocket(String file){
				try{
					InetAddress addr = InetAddress.getByName("localhost");
					Socket socket=new Socket(addr,5203);
					BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
					PrintWriter out=new PrintWriter(socket.getOutputStream());
					for(int i =0 ;i<1000000;i++){
					String readline= file+i+"AAAA" ;;  //sin.readLine(); //从系统标准输入读入一字符串
					//将从系统标准输入读入的字符串输出到Server
					out.println(readline);
					//刷新输出流,使Server马上收到该字符串
					out.flush();
					System.out.println("Client:"+readline);

					System.out.println("Servlet :"+in.readLine());
					}
					socket.close(); //关闭Socket

					}catch(Exception e) {

					System.out.println("Error"+e); //出错,则打印出错信息

					}

			}

}

客户B端的代码:

import java.io.*;

import java.net.*;

public class TalkClient {

			public static void main(String args[]) {
				String rootPath=TalkClient.class.getResource("/").getFile().toString();
		    	String fileName =rootPath+"Initialize.txt";

					String file = "my name is YI! nice to meet you";//ReadFromFile.readFileByLinesln(fileName);
					exSocket(file);
		}

			public static void exSocket(String file){
				try{
					InetAddress addr = InetAddress.getByName("localhost");
					Socket socket=new Socket(addr,5203);
					BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
					PrintWriter out=new PrintWriter(socket.getOutputStream());
					for(int i =0 ;i<1000000;i++){
					String readline= file+i+"BBBB" ;;  //sin.readLine(); //从系统标准输入读入一字符串
					//将从系统标准输入读入的字符串输出到Server
					out.println(readline);
					//刷新输出流,使Server马上收到该字符串
					out.flush();
					System.out.println("Client:"+readline);

					System.out.println("Servlet :"+in.readLine());
					}
					socket.close(); //关闭Socket

					}catch(Exception e) {

					System.out.println("Error"+e); //出错,则打印出错信息

					}

			}

}
时间: 2024-10-18 13:36:21

Java Socket 多线程编程,处理百万级的数据并发。的相关文章

Java的多线程编程模型5--从AtomicInteger开始

Java的多线程编程模型5--从AtomicInteger开始 2011-06-23 20:50 11393人阅读 评论(9) 收藏 举报 java多线程编程jniinteger测试 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicInteger则通过一种线程安全的加减操作接口. 来看AtomicInteger提供的接口. //获取当前的值 publ

java socket 多线程网络传输多个文件

http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人阅读 评论(1) 收藏 举报  分类: JAVA(158)  由于需要研究了下用 java socket 传输文件,由于需要传输多个文件,因此,采用了多线程设计.客户端每个线程创建一个 socket 连接,每个 socket 连接负责传输一个文件,服务端的ServerSocket每次 accept

Java Socket 网络编程心跳设计概念

Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于检测TCP的异常断开.一般是用来判断对方(设备,进程或其它 网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于检测TCP的异常断开.基本原因是服务 器端不能有效的判断客户端是否在线也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况.

Java Socket网络编程Server端详解

Socket通信:分为客户端和服务端的socket代码. Java SDK提供一些相对简单的Api来完成.对于Java而言.这些Api存在与java.net 这个包里面.因此只要导入这个包就可以开始网络编程了. 网络编程的基本模型就是客户机到服务器模型.简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置.并去建立两者之间的联系,然后完成数据的通讯就可以了.这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端.了解这个简单的模型,就可以

Java Socket网络编程的经典例子(转)

事实上网络编程简单的理解就是两台计算机相互通讯数据而已,对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了,Java SDK提供一些相对简单的Api来完成这些工作.Socket就是其中之一,对于Java而言,这些Api存在与java.net 这个包里面,因此只要导入这个包就可以准备网络编程了. 网络编程的基本模型就是客户机到服务器模型,简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置.并去建立两者之间的联系,然后完成

java socket网络编程(多线程技术)

Client.java import java.io.*; import java.net.*; import java.util.*; public class Client { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); Socket mysocket=null; DataInputStream in=null; DataOutputStream out=null; Th

java socket 网络编程

一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

C#中Socket多线程编程

C#是微软随着VS.net新推出的一门语言.它作为一门新兴的语言,有着C++的强健,又有着VB等的RAD特性.而且,微软推出C#主要的目的是为了对抗Sun公司的Java.大家都知道Java语言的强大功能,尤其在网络编程方面.于是,C#在网络编程方面也自然不甘落后于人.本文就向大家介绍一下C#下实现套接字(Sockets)编程的一些基本知识,以期能使大家对此有个大致了解.首先,我向大家介绍一下套接字的概念. 套接字基本概念: 套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.可以

【Socket】Java Socket基础编程

Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基本示例 二.消息通信优化 2.1 双向通信,发送消息并接受消息 2.2 使用场景 2.3 如何告知对方已发送完命令 2.3.1 通过Socket关闭 2.3.2 通过Socket关闭输出流的方式 2.3.3 通过约定符号 2.3.4 通过指定长度 三.服务端优化 3.1 服务端并发处理能力 3.2