`
jiq408694711
  • 浏览: 36625 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Java网络通信套接字

 
阅读更多

(一)第一个例子是简单的Socket通信,一个客户端和一个服务器线程:

/**
 * SimpleClient.java
 */
package network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SimpleClient {

	public static void main(String[] args) {
		Socket socket = null;
		BufferedReader reader = null;
		PrintWriter writer = null;
		try {			
			//请求建立通信套接字
			socket  = new Socket("localhost",8089);
			
			//获取输入输出流
			reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			writer = new PrintWriter(socket.getOutputStream(), true);	//true means autoFlush 
			
			//while(true){
				writer.println("hello, I am Client\n");
				String mess = reader.readLine();
				System.out.print("Client Receive:"+mess);
			//}
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(socket != null) socket.close();
				if(reader != null) reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			if(writer != null) writer.close();
		}
	}
}
/**
 * SimpleServer.java
 */
package network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {

	public static void main(String[] args) {
		ServerSocket ss = null;	//用于接收请求的Socket
		Socket socket = null;	//用于通信的Socket
		BufferedReader reader = null;
		PrintWriter writer = null;
		
		try {
			
			ss = new ServerSocket(8089);
			System.out.print("waiting for new request...\n");
			socket = ss.accept();	//等待请求,建立通信Socket
			
			reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			writer = new PrintWriter(socket.getOutputStream(), true);
			
			String mess = reader.readLine();
			System.out.print("Server Receive:"+mess);
			writer.println("Yes, I can hear you");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


(二)第二个列子是在服务器端,采用多线程方式处理来自客户端的请求:

/**
 * TCPClient.java
 */
package network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClient {
	private static int id = 0;
	
	public static void main(String[] args) {
		
		String host = "localhost";
		int port = 8060;
		Socket socket = null;
		BufferedReader in = null;
		PrintWriter out = null;
		
		try {
			
			//创建五个请求服务器连接的客户端
			for(int i=0;i<5;i++){
				
				//创建通信套接字
				socket = new Socket(host, port);
				
				//获取套接字的输入输出流
				in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				out = new PrintWriter(socket.getOutputStream(), true);
				
				//向服务器发送消息
				out.println("hello, i am client "+(++id));
			}
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			System.out.print("Closing Socket...\n");
			try {
				if(socket != null) socket.close();
				if(in != null) in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			if(out != null) out.close();
		}
	}
}
/**
 * TCPServer.java
 */
package network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
	public static void main(String[] args) {

		int port = 8060;
		Socket socket = null;
		ServerSocket server = null;
		
		try {			
			//创建服务器套接字
			server = new ServerSocket(port);
			
			while(true){
				
				//接收来自客户端的请求,建立通信套接字
				System.out.print("waiting for new request...\n");
				socket = server.accept();
				
				//创建一个线程处理该请求
				Thread t = new Thread(new ServerThread(socket));
				t.start();
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			try {
				if(server != null) server.close();
				if(socket != null) socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}			
		}
	}
}

/**
 * 处理来自客户端请求的线程
 * */
class ServerThread implements Runnable{
	private Socket socket;
	
	public ServerThread(Socket s){
		this.socket = s;
	}
	
	public void run() {
		BufferedReader in = null;
		PrintWriter out = null;
		
		try {
			//获取套接字的输入输出流
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			out = new PrintWriter(socket.getOutputStream(), true);
			
			//读取客户端发送来的消息
			String s = in.readLine();
			System.out.println("recv:"+s);
			//out.write("accept");
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			
			System.out.print("Closing Connection...\n");
			try {
				if(socket != null) socket.close();
				if(in != null) in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			if(out != null) out.close();
		}		
	}	
}


分享到:
评论

相关推荐

    Socket套接字—Java套接字编程

    Socket套接字是Java编程语言中用于网络通信的核心组件,它是实现客户端-服务器模型的基础。在Java中,Socket和ServerSocket类提供了套接字编程的基本功能。本文将深入探讨Java套接字编程的相关知识点,包括Socket和...

    基于Java的Socket套接字编程 源代码

    Java的Socket套接字编程是网络通信中的基础技术,它提供了两台计算机间低级别的连接。在Java中,Socket类和ServerSocket类是实现客户端-服务器通信的核心组件。本资源包含的是基于Java的Socket套接字编程的源代码...

    Java非阻塞套接字概述

    Java非阻塞套接字是Java 1.4引入的一项重要特性,它是Java NIO(New Input/Output)的一部分,提供了高效、灵活且可扩展的网络通信能力。非阻塞套接字允许在网络通信中使用套接字时,不会因为等待数据而阻塞应用程序...

    Java 套接字编程Java 套接字编程

    其中,套接字编程是Java网络编程的核心之一,它允许程序通过网络进行通信。 #### 三、套接字的概念 **套接字**(Socket)是在两个程序之间进行通信的端点。它为两个程序提供了一种双向的数据传输机制,使得一个...

    java中socket套接字定义与使用

    总的来说,Java中的Socket套接字是实现网络通信的核心工具,无论是基于TCP的稳定传输还是UDP的高效传输,都能通过Socket灵活地构建网络应用。在实际开发中,开发者应根据应用的需求和场景选择合适的通信协议,以实现...

    socket 套接字 Java 套接字 编程

    Java套接字编程是网络通信的核心技术之一,主要用于实现客户端与服务器之间的数据交换。本文将深入探讨Java中的Socket编程,包括基本概念、工作原理、创建和使用Socket的过程,以及常见问题和解决策略。 1. 基本...

    Java套接字编程

    ### Java套接字编程详解 ...通过深入理解套接字的工作机制、IP地址和端口号的作用以及流套接字的连接过程,开发者可以更有效地设计和实现网络通信功能。掌握这些核心概念是成为Java网络编程专家的关键步骤。

    java基于UNIX域套接字(unix domain socket)连接redis

    为了优化网络通信,有时我们会选择使用UNIX域套接字(UNIX Domain Socket,简称UDS)来代替传统的TCP/IP套接字进行进程间通信(IPC)。本篇将详细讲解如何在Java环境下,利用UNIX域套接字连接并操作Redis,以及涉及...

    java套接字聊天

    Java套接字聊天是一种基于Java编程语言实现的网络通信应用,它允许两个或多个设备通过TCP/IP协议进行数据交换,从而实现在线聊天功能。在这个系统中,通常会有一个服务器端程序(chat_socket_server)和一个或多个...

    java的套接字编程 简单的QQ

    Java的套接字编程是网络通信中的基础技术,主要用于实现客户端和服务器之间的双向通信。在本项目"简单的QQ"中,我们看到它被用来构建一个类似QQ的局域网聊天应用。下面将详细讲解Java套接字编程的核心概念、原理以及...

    一个经典的java 套接字传输范例

    Java套接字(Socket)是网络编程中的基本概念,它为两台计算机之间的通信提供了低级别的接口。在Java中,套接字允许客户端应用程序...理解并熟练掌握套接字的使用,对于开发任何涉及网络通信的Java项目都是至关重要的。

    java聊天 socke套接字

    Java聊天程序基于Socket套接字实现,是一种基础的网络通信技术,主要用于客户端和服务器之间的数据交互。在Java中,Socket类代表一个网络连接,而ServerSocket类用于监听和接受来自客户端的连接请求。本教程适合Java...

    聊天室代码 套接字 java

    在Java编程中,创建一个简单的聊天室涉及到网络通信的核心概念——套接字(Socket)。套接字是网络编程的基本组成部分,它提供了进程间的通信能力,允许两台计算机通过网络交换数据。在这个场景下,我们讨论的是基于...

    java套接字编程笔记

    Java套接字编程是网络通信的核心技术之一,它允许两个应用程序通过网络进行数据交换。在Java中,套接字(Socket)是实现客户端-服务器模型通信的基础,它提供了低级别的、面向连接的、可靠的字节流服务。这篇笔记将...

    java套接字编程java套接字编程.doc

    Java套接字编程是Java开发网络软件的核心技术之一,利用Java提供的强大网络API,可以轻松地开发网络通信软件。在这篇文章中,我们将详细介绍套接字(Socket)的概念,并通过实例说明如何使用Network API操纵套接字,...

    Java Socket套接字

    Java Socket套接字是Java网络编程中的核心组件,它提供了应用程序之间进行低级通信的机制。Socket基于TCP/IP协议,允许两台计算机通过网络进行双向通信。本篇文章将深入探讨Java Socket的基础知识,包括其原理、创建...

    流式套接字实现简单的客户端服务端通信过程

    - Java的`java.net.Socket`和`ServerSocket`类分别代表客户端和服务器端的套接字。 4. **错误处理和优化** - 网络通信中,错误处理非常重要,如网络中断、超时等,需要通过异常捕获或者返回值检查来处理。 - ...

    JAVA网络编程学习资料以及源代码Socket套接字网络协议

    Java网络编程是开发分布式应用程序的关键技术,而Socket套接字是实现网络通信的基础。本学习资料包涵盖了关于Java网络编程的全面知识,包括Socket套接字的使用和网络协议的理解。 首先,我们要理解Java中的Socket。...

    网络套接字实现服务器返回客户机发送数据

    在IT领域,网络通信是至关重要的部分,而网络套接字(Socket)是实现网络通信的基础工具。"网络套接字实现服务器返回客户机发送数据"这个标题涉及到的是客户端-服务器(Client-Server)架构中的数据交互过程。下面将...

    java 简单 网络套接字 序列化&反序列化实用实例,可供初学习者学习

    Java网络编程中,网络套接字(Socket)是实现客户端-服务器通信的关键组件。在网络通信过程中,数据通常需要在不同的对象之间传输,这就涉及到对象的序列化与反序列化。序列化是将对象转换为字节流的过程,而反序列...

Global site tag (gtag.js) - Google Analytics