(一)第一个例子是简单的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编程语言中用于网络通信的核心组件,它是实现客户端-服务器模型的基础。在Java中,Socket和ServerSocket类提供了套接字编程的基本功能。本文将深入探讨Java套接字编程的相关知识点,包括Socket和...
Java的Socket套接字编程是网络通信中的基础技术,它提供了两台计算机间低级别的连接。在Java中,Socket类和ServerSocket类是实现客户端-服务器通信的核心组件。本资源包含的是基于Java的Socket套接字编程的源代码...
Java非阻塞套接字是Java 1.4引入的一项重要特性,它是Java NIO(New Input/Output)的一部分,提供了高效、灵活且可扩展的网络通信能力。非阻塞套接字允许在网络通信中使用套接字时,不会因为等待数据而阻塞应用程序...
其中,套接字编程是Java网络编程的核心之一,它允许程序通过网络进行通信。 #### 三、套接字的概念 **套接字**(Socket)是在两个程序之间进行通信的端点。它为两个程序提供了一种双向的数据传输机制,使得一个...
总的来说,Java中的Socket套接字是实现网络通信的核心工具,无论是基于TCP的稳定传输还是UDP的高效传输,都能通过Socket灵活地构建网络应用。在实际开发中,开发者应根据应用的需求和场景选择合适的通信协议,以实现...
Java套接字编程是网络通信的核心技术之一,主要用于实现客户端与服务器之间的数据交换。本文将深入探讨Java中的Socket编程,包括基本概念、工作原理、创建和使用Socket的过程,以及常见问题和解决策略。 1. 基本...
### Java套接字编程详解 ...通过深入理解套接字的工作机制、IP地址和端口号的作用以及流套接字的连接过程,开发者可以更有效地设计和实现网络通信功能。掌握这些核心概念是成为Java网络编程专家的关键步骤。
为了优化网络通信,有时我们会选择使用UNIX域套接字(UNIX Domain Socket,简称UDS)来代替传统的TCP/IP套接字进行进程间通信(IPC)。本篇将详细讲解如何在Java环境下,利用UNIX域套接字连接并操作Redis,以及涉及...
Java套接字聊天是一种基于Java编程语言实现的网络通信应用,它允许两个或多个设备通过TCP/IP协议进行数据交换,从而实现在线聊天功能。在这个系统中,通常会有一个服务器端程序(chat_socket_server)和一个或多个...
Java的套接字编程是网络通信中的基础技术,主要用于实现客户端和服务器之间的双向通信。在本项目"简单的QQ"中,我们看到它被用来构建一个类似QQ的局域网聊天应用。下面将详细讲解Java套接字编程的核心概念、原理以及...
Java套接字(Socket)是网络编程中的基本概念,它为两台计算机之间的通信提供了低级别的接口。在Java中,套接字允许客户端应用程序...理解并熟练掌握套接字的使用,对于开发任何涉及网络通信的Java项目都是至关重要的。
Java聊天程序基于Socket套接字实现,是一种基础的网络通信技术,主要用于客户端和服务器之间的数据交互。在Java中,Socket类代表一个网络连接,而ServerSocket类用于监听和接受来自客户端的连接请求。本教程适合Java...
在Java编程中,创建一个简单的聊天室涉及到网络通信的核心概念——套接字(Socket)。套接字是网络编程的基本组成部分,它提供了进程间的通信能力,允许两台计算机通过网络交换数据。在这个场景下,我们讨论的是基于...
Java套接字编程是网络通信的核心技术之一,它允许两个应用程序通过网络进行数据交换。在Java中,套接字(Socket)是实现客户端-服务器模型通信的基础,它提供了低级别的、面向连接的、可靠的字节流服务。这篇笔记将...
Java套接字编程是Java开发网络软件的核心技术之一,利用Java提供的强大网络API,可以轻松地开发网络通信软件。在这篇文章中,我们将详细介绍套接字(Socket)的概念,并通过实例说明如何使用Network API操纵套接字,...
Java Socket套接字是Java网络编程中的核心组件,它提供了应用程序之间进行低级通信的机制。Socket基于TCP/IP协议,允许两台计算机通过网络进行双向通信。本篇文章将深入探讨Java Socket的基础知识,包括其原理、创建...
- Java的`java.net.Socket`和`ServerSocket`类分别代表客户端和服务器端的套接字。 4. **错误处理和优化** - 网络通信中,错误处理非常重要,如网络中断、超时等,需要通过异常捕获或者返回值检查来处理。 - ...
Java网络编程是开发分布式应用程序的关键技术,而Socket套接字是实现网络通信的基础。本学习资料包涵盖了关于Java网络编程的全面知识,包括Socket套接字的使用和网络协议的理解。 首先,我们要理解Java中的Socket。...
在IT领域,网络通信是至关重要的部分,而网络套接字(Socket)是实现网络通信的基础工具。"网络套接字实现服务器返回客户机发送数据"这个标题涉及到的是客户端-服务器(Client-Server)架构中的数据交互过程。下面将...
Java网络编程中,网络套接字(Socket)是实现客户端-服务器通信的关键组件。在网络通信过程中,数据通常需要在不同的对象之间传输,这就涉及到对象的序列化与反序列化。序列化是将对象转换为字节流的过程,而反序列...