`
coach
  • 浏览: 386755 次
  • 性别: Icon_minigender_2
  • 来自: 印度
社区版块
存档分类
最新评论

Java--Socket通信(双向)

    博客分类:
  • http
阅读更多
新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端
两个工程的读写操作线程类基本上完全相同

服务端:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static final int PORT = 8000;//监听的端口号   

	public static void main(String[] args) {  
		Server server = new Server();  
		server.init();  
	}  

	public void init() {  
		ServerSocket serverSocket = null;
		try {  
			serverSocket = new ServerSocket(PORT);  
			while (true) {  
				Socket client = serverSocket.accept();  
				//一个客户端连接就开户两个线程处理读写  
				new Thread(new ReadHandlerThread(client)).start();  
				new Thread(new WriteHandlerThread(client)).start(); 
			}  
		} catch (Exception e) {  
			e.printStackTrace();  
		} finally{
			try {
				if(serverSocket != null){
					serverSocket.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}  
}  

/*
 *处理读操作的线程 
 */
class ReadHandlerThread implements Runnable{
	private Socket client;

	public ReadHandlerThread(Socket client) {
		this.client = client;
	}

	@Override
	public void run() {
		DataInputStream dis = null;
		try{
			while(true){
				//读取客户端数据  
				dis = new DataInputStream(client.getInputStream());
				String reciver = dis.readUTF();
				System.out.println("客户端发过来的内容:" + reciver); 
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				if(dis != null){
					dis.close();
				}
				if(client != null){
					client = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

/*
 * 处理写操作的线程
 */
class WriteHandlerThread implements Runnable{
	private Socket client;

	public WriteHandlerThread(Socket client) {
		this.client = client;
	}

	@Override
	public void run() {
		DataOutputStream dos = null;
		BufferedReader br = null;
		try{
			while(true){
				//向客户端回复信息  
				dos = new DataOutputStream(client.getOutputStream());  
				System.out.print("请输入:\t");  
				// 键盘录入  
				br = new BufferedReader(new InputStreamReader(System.in));
				String send = br.readLine();  
				//发送数据
				dos.writeUTF(send);  
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				if(dos != null){
					dos.close();
				}
				if(br != null){
					br.close();
				}
				if(client != null){
					client = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


客户端:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {

	public static final String IP = "localhost";//服务器地址 
	public static final int PORT = 8000;//服务器端口号  

	public static void main(String[] args) {  
		handler(); 
	}

	private static void handler(){
		try {
			//实例化一个Socket,并指定服务器地址和端口
			Socket client = new Socket(IP, PORT);
			//开启两个线程,一个负责读,一个负责写
			new Thread(new ReadHandlerThread(client)).start();
			new Thread(new WriteHandlerThread(client)).start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}  

/*
 *处理读操作的线程 
 */
class ReadHandlerThread implements Runnable{
	private Socket client;

	public ReadHandlerThread(Socket client) {
		this.client = client;
	}

	@Override
	public void run() {
		DataInputStream dis = null;
		try {
			while(true){
				//读取服务器端数据  
				dis = new DataInputStream(client.getInputStream());
				String receive = dis.readUTF();   
				System.out.println("服务器端返回过来的是: " + receive);  
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				if(dis != null){
					dis.close();
				}
				if(client != null){
					client = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

/*
 * 处理写操作的线程
 */
class WriteHandlerThread implements Runnable{
	private Socket client;

	public WriteHandlerThread(Socket client) {
		this.client = client;
	}

	@Override
	public void run() {
		DataOutputStream dos = null;
		BufferedReader br = null;
		try {
			while(true){
				//取得输出流
				dos = new DataOutputStream(client.getOutputStream());
				System.out.print("请输入: \t");  
				//键盘录入
				br = new BufferedReader(new InputStreamReader(System.in));
				String send = br.readLine();  
				//发送数据
				dos.writeUTF(send);  
			}
		} catch (IOException e) {
			e.printStackTrace();
		}  finally{
			try{
				if(dos != null){
					dos.close();
				}
				if(br != null){
					br.close();
				}
				if(client != null){
					client = null;
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}
分享到:
评论

相关推荐

    Java-network-socket-programming.zip_java programming_java socket

    3. InputStream和OutputStream:Socket通信的基础,分别用于读取和写入数据。通常使用BufferedReader和PrintWriter进行文本数据的读写。 4. InetSocketAddress类:用于封装IP地址和端口号,作为Socket和ServerSocket...

    java-SWT-socket.zip_SWT_SWT socket

    Socket通信是基于TCP/IP协议的,允许两个网络连接的端点进行双向通信。在Java中,我们可以使用`java.net.Socket`和`java.net.ServerSocket`类来创建和管理这些连接。在SWT环境中,我们可以创建一个用户界面,通过...

    JAVA TCP-IP Socket网络通信编程研究.pdf

    1. 客户端 Socket 通信过程:Socket 是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。 2. 服务器端 Socket 通信过程:ServerSocket 用于...

    【IT十八掌徐培成】Java基础第18天-03.Socket通信基础.zip

    Java Socket通信基础是Java网络编程中的重要组成部分,它允许两台设备通过网络进行数据交换。在本课程"【IT十八掌徐培成】Java基础第18天-03.Socket通信基础"中,讲师徐培成将深入讲解Socket通信的核心概念、原理...

    Java Socket 聊天通信演示代码

    首先,Java Socket通信基于TCP(传输控制协议),它确保了数据的可靠传输,包括数据的顺序和无丢失。在聊天应用中,服务器端创建一个Socket监听特定的端口,等待客户端的连接请求。一旦客户端连接到服务器,它们之间...

    基于Java的实例源码-Java Socket通信实现.zip

    Java Socket通信实现是网络编程中的一个关键概念,主要用于在两台计算机之间建立可靠的、双向的数据传输连接。在Java中,Socket类和ServerSocket类是进行网络通信的核心组件。本实例源码提供了关于如何使用Java ...

    基于Java的源码-Java Socket通信实现.zip

    Java Socket通信实现是一种在两台计算机之间建立低级网络连接的方法,它允许应用程序进行双向通信。Socket编程是Java网络编程的基础,广泛应用于服务器与客户端之间的交互,如在线聊天、文件传输、远程登录等应用...

    java实现简单socket通信

    Java实现的简单Socket通信是网络编程中的基础技术,主要用于设备间的双向数据传输。在这个场景中,我们有两个窗口,一个作为服务器端,另一个作为客户端,它们通过TCP协议进行通信。TCP是一种面向连接的、可靠的传输...

    java Socket通信实现

    Java Socket通信实现是Java网络编程中的重要组成部分,它允许两台计算机通过TCP/IP协议进行双向通信。在Java中,Socket提供了低级别的、基于连接的、面向数据流的通信API,可以用于实现客户端-服务器架构的应用程序...

    Java中Socket通信-服务端和客户端双向传输字符串实现示例代码.rar

    Java中Socket通信-服务端和客户端双向传输字符串实现示例代码。在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的...

    socket.io-server-java-3.0.0

    socket.io-server-java-3.0.0,Socket.IO 是一个库,可以在客户端和服务器之间实现低延迟, 双向和基于事件的通信:socket.io-server-java-3.0.0.tar.gzsocket.io-server-java-3.0.0.zip

    Java TCP-IP Socket编程-卡尔弗特.pdf

    Socket通信过程中,数据通常以字节流的形式传输。因此,可以使用InputStreamReader、OutputStreamWriter等字符流类,配合BufferedReader和PrintWriter,实现字符串的读写。例如,服务器端通过`PrintWriter.println()...

    java socket通信实现

    Java Socket通信实现是一种基于TCP/IP协议的网络通信方式,它允许两台计算机通过互联网进行双向数据传输。在Java中,Socket类和ServerSocket类是实现客户端-服务器模型通信的核心工具。下面将详细介绍Java Socket...

    Java_socket 通信示例(Java源码)

    Java Socket通信是网络编程中的基础概念,主要用于两个应用程序之间的双向通信。在这个"Java_socket 通信示例"中,我们看到的是一个简单的聊天室应用,它利用了Java的Socket API来实现实时的数据交换。以下是对这个...

    Java ssl socket 双向认证

    Java SSL(Secure Socket Layer)套接字是一种用于在两个应用程序之间建立安全通信通道的协议,主要目的是为了确保数据传输的安全性。SSL通过使用加密技术来保护数据,防止未经授权的访问和篡改。在Java中,我们可以...

    JAVA-Audio.rar_audio capture_java-audio_java音频_socket 音频_socket

    在Java中,Socket是实现网络通信的基础,它提供了双向通信通道。当我们要通过网络传输音频数据时,通常会创建一个Socket连接,服务器端打开一个监听Socket等待客户端连接,客户端则通过Socket发送音频数据到服务器。...

    Java--Socket通信(客户端服务端双向)

    在本文中,我们将深入探讨如何在Java中实现客户端和服务器之间的双向Socket通信。 首先,让我们创建两个独立的Java项目,一个作为服务器端(Server),另一个作为客户端(Client)。在服务器端,我们需要创建一个...

    DH-基于socket通信的javaDH通信实现 .rar

    Socket通信是Java中用于网络通信的基础组件,它允许两台计算机通过TCP/IP协议进行双向数据传输。 首先,我们来理解DH算法的基本原理。DH算法的核心在于两个通信方(A和B)可以在公开通信的情况下,通过数学计算交换...

    Java Socket 通信服务与客户端完整示例

    在这个"Java Socket 通信服务与客户端完整示例"中,我们可以深入理解Socket通信的原理以及如何在实际项目中应用。 1. **Socket基本概念** - **ServerSocket**: 服务器端使用的类,用于监听客户端的连接请求。 - *...

    java源码:java Socket通信实现.rar

    Java Socket通信实现是Java网络编程中的重要组成部分,它允许两台计算机通过TCP/IP协议进行双向通信。本资源包含了一系列的Java源代码示例,用于演示如何使用Socket进行基本的网络通信。下面将详细讲解Java Socket...

Global site tag (gtag.js) - Google Analytics