`
chenhua_1984
  • 浏览: 1246507 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

socket学习笔记之五:socket构建多线程通信程序

阅读更多

 下面是原代码,比较简单的功能,提供个参考和入门学习。

1服务器侦听代码:

package test;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ThreadServer {

	final static int portNo=4444;
	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		try {
		    serverSocket=new ServerSocket(portNo);
			System.out.println("The Server is start:"+serverSocket);
			
			while(true){
				Socket socket=serverSocket.accept();
				new ServerThreadCode(socket);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			try {
				serverSocket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		 
	}

}

 2服务器逻辑实现代码

package test;

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.Socket;

public class ServerThreadCode extends Thread {

	private Socket socket;
	private BufferedReader sin;
	private PrintWriter pw;

	public ServerThreadCode() {
	}

	public ServerThreadCode(Socket s) {
		this.socket = s;
		try {
			sin = new BufferedReader(new InputStreamReader(socket
					.getInputStream()));
			pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
					socket.getOutputStream())), true);
			this.start();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void run() {
		try {
			
			for (;;) {
				String str = sin.readLine();
				if("byebye".equalsIgnoreCase(str)){
					break;
				}
				System.out.println("In Server the info"+str);
				pw.println(str);
			}
			System.out.println("closing the server socket!");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			System.out.println("close the server socket and the io.");
			try {
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}

	}

}

 3客户端代码

package test;

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;

public class ClientThreadCode extends Thread {
	private Socket socket;
	private static int cnt=0;
	private int clientId=cnt++;
	private BufferedReader in;
	private PrintWriter out;
	
	public ClientThreadCode(InetAddress inet){
		try {
			socket=new Socket(inet,4444);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		try {
			in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
			this.start();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
	public void  run(){
		String str;
		try {
			out.println("Hello Server,My Id is:"+clientId);
			str = in.readLine();
			System.out.println(str);
			out.println("byebye");
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	
		
	}
}

 4调用客户端的代码

package test;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class ThreadClient {

	public static void main(String[] args) {
		int threadNo=0;
		InetAddress addr;
		try {
			addr = InetAddress.getByName("localhost");
			for(threadNo=0;threadNo<3;threadNo++){
				new ClientThreadCode(addr);
			}
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
分享到:
评论

相关推荐

    学习笔记:多线程Java Socket编程示例

    总结来说,这个学习笔记提供了一个使用Java Socket编程实现多线程服务器的示例,它演示了如何利用ExecutorService创建线程池来处理并发连接,是理解Java并发编程和网络通信的一个实用案例。虽然这是一个学习笔记,但...

    Socket网络编程学习笔记

    这份"Socket网络编程学习笔记.doc"不仅介绍了理论知识,还可能包含示例代码和练习,帮助读者深入理解和掌握Socket网络编程,从而能够开发出自己的网络应用程序。通过深入学习,初学者将能逐步成长为熟练的网络程序员...

    socket 学习笔记

    以下是对Socket学习笔记的详细解释: 1. **Socket构造方法**: - `Socket()`:创建一个未连接的Socket对象。 - `Socket(InetAddress address, int port)`:创建一个Socket并连接到指定的IP地址和端口。 - `...

    模仿QQ通信的socket聊天室

    总的来说,这个项目为我们提供了一个学习和实践Socket编程,尤其是多线程Socket通信的绝佳机会。通过分析和理解代码,我们可以掌握如何构建一个简单的网络聊天应用,这对于深入理解网络编程和并发处理至关重要。同时...

    socket学习笔记

    在本文中,我们将深入探讨"socket学习笔记"中的关键概念和技术细节。 首先,让我们理解什么是Socket。Socket是应用层与传输层之间的一个接口(API),它允许程序通过网络进行数据交换。在TCP/IP协议族中,Socket...

    Socket学习笔记

    本资源包含了Socket学习笔记和课件,适合对网络编程感兴趣的初学者或希望深入理解Socket技术的学习者。 首先,我们需要了解Socket的基本概念。Socket是操作系统提供的一个接口,它允许应用程序通过这个接口发送和...

    Socket网络编程学习笔记之---使用线程池提高性能

    本篇学习笔记将深入探讨如何结合Socket与线程池来提升程序的运行效率。 一、Socket基础 Socket,也称为套接字,是网络编程中的一个重要概念,它是进程间通信(IPC)的一种方式,特别是在网络环境中。Socket提供了一...

    Socket网络编程学习笔记(6)

    在本文中,我们将关注如何使用线程池来优化Socket通信中的多线程处理,以提高程序性能。 在传统的Socket编程中,每当有新的客户端请求连接时,服务端通常会创建一个新的线程来处理该连接。虽然这种方法直观易懂,但...

    Java 客户端服务器程序 学习笔记

    在这个“Java客户端服务器程序学习笔记”中,我们将深入探讨这一主题,包括如何设计、实现和交互这两个关键组件。 首先,客户端是用户与系统进行交互的部分,它发送请求到服务器并接收响应。服务器端则处理这些请求...

    linux socket编程笔记.rar

    - 多线程和多进程编程:在Socket编程中,如何利用多线程或多进程实现并发服务。 - 常见问题:例如端口复用、半关闭状态、TIME_WAIT状态等,并给出解决方案。 通过对这些笔记的学习,开发者可以掌握Linux环境下进行...

    Android代码-在wifi下手机与电脑的socket通信.zip

    在Android平台上实现手机...学习并理解这些代码,开发者将能够构建自己的Android应用,实现在WiFi环境下与电脑的Socket通信。在实际项目中,可以根据需求进行扩展,比如添加多线程处理、数据编码解码、错误处理等功能。

    Socket网络编程学习笔记(2)

    Socket网络编程是构建网络应用程序的基础,它允许两个设备(如计算机)通过网络交换数据。本文主要探讨面向连接的TCP Socket编程,这是一种可靠的、基于连接的通信协议。 在TCP Socket编程中,服务端需要进行一系列...

    java 经典自学程序及学习笔记心得

    2. 多线程:Java内置了对多线程的支持,学习如何创建和管理线程,理解同步和互斥的概念,有助于编写能够充分利用多核处理器性能的应用程序。 3. 网络编程:Java提供了丰富的API来处理网络通信,如Socket编程,可以...

    用Python语言实现多线程客户端与服务端的对话程序

    一、程序功能可以实现多台电脑互通消息,且利用多线程实现一台服务器与多台客户端的连续对话二、关键代码块主要模块socket与threading1.客户端实现:socket.connect(),socket.send(),socket.recv()2.服务器实现:...

    Java 学习笔记Java学习笔记

    7. 多线程:Java内置了对多线程的支持,通过Thread类或实现Runnable接口创建线程。线程同步机制包括synchronized关键字、wait()、notify()和notifyAll()方法,以及Lock接口和相关的实现类。 8. 数据库操作:Java ...

Global site tag (gtag.js) - Google Analytics