- 浏览: 1248381 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (193)
- ant/maven (6)
- algorithm (5)
- tomcat/weblogic/jboss (6)
- javascript/jquery (13)
- java (33)
- flex/flash (0)
- JPA/Hibernate/myBatis (18)
- java concurrent (7)
- test (2)
- windows/linux (6)
- java collection (7)
- design pattern (2)
- life/health (3)
- database (12)
- IDE (4)
- spring/ejb (20)
- html/css/ckeditor (7)
- jsp/servlet (3)
- java io (13)
- java security (4)
- jni (0)
- svn/git (2)
- english (2)
- java jmx (1)
- xml (1)
- struts/springmvc (9)
- middleware (2)
- cache (1)
- cglib (3)
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
Socket编程就是根据服务器/客户端模型,在Socket API的基础上开发的网络计算机和进程间相互通信的应用。
1. 服务端绑定一个端口号,并在此端口监听客户端的连接,线程会block直到有客户连接请求,读取请求信息,然后处理并返回。
2. 客户端和指定的服务器的指定端口建立连接,发送请求信息,并等待返回信息。
服务端:
客户端:
其中:
1. out = new PrintWriter(connection.getOutputStream()); 使用系统默认的编码格式。
如果默认编码不符合要求,使用OutputStreamWriter指定:
out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), "utf-8"));
2. 可以把手动flush改成自动的:
out = new PrintWriter(connection.getOutputStream(), true);
这样,当println, printf, format方法调用时,将缓存输出到底层流并清空缓存。
3. 必须首先开启服务端,否则客户端建立连接的时候会报java.net.ConnectException: Connection refused: connect
1. 服务端绑定一个端口号,并在此端口监听客户端的连接,线程会block直到有客户连接请求,读取请求信息,然后处理并返回。
2. 客户端和指定的服务器的指定端口建立连接,发送请求信息,并等待返回信息。
服务端:
public class MyServer { ServerSocket server; Socket client; BufferedReader in; PrintWriter out; public MyServer() { try { // Instantiate a ServerSocket with specified port server = new ServerSocket(4451); // Listen on the port to receive the connection request client = server.accept(); // Construct a reader to get the information from the client in = new BufferedReader(new InputStreamReader(client.getInputStream())); // Construct a writer to respond to the client out = new PrintWriter(client.getOutputStream()); // Continually to retrieve the message from the client while (true) { String input = in.readLine(); System.out.println(input); out.println("has received: " + input); out.flush(); if (input.equals("end")) break; } } catch (IOException ex) { ex.printStackTrace(); } finally { // Release the resources - omitted } } public static void main(String[] args) { new MyServer(); } }
客户端:
public class MyClient { Socket connection; BufferedReader in; PrintWriter out; BufferedReader reader; public MyClient() { try { // Establish a connection to the Socket server connection = new Socket(InetAddress.getLocalHost(),4451); // Construct a reader to get the response from the server in = new BufferedReader(new InputStreamReader(connection.getInputStream())); // Construct a writer to send messages to the server out = new PrintWriter(connection.getOutputStream()); // Construct a reader to accept the user input reader = new BufferedReader(new InputStreamReader(System.in)); // Continuously send out the messages to the server and receive the response while (true) { String str = reader.readLine(); out.println(str); out.flush(); System.out.println("sent out: " + str); if (str.equals("end")) break; System.out.println(in.readLine()); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // Release the resources - omitted } } public static void main(String[] args) { new MyClient(); } }
其中:
1. out = new PrintWriter(connection.getOutputStream()); 使用系统默认的编码格式。
如果默认编码不符合要求,使用OutputStreamWriter指定:
out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), "utf-8"));
2. 可以把手动flush改成自动的:
out = new PrintWriter(connection.getOutputStream(), true);
这样,当println, printf, format方法调用时,将缓存输出到底层流并清空缓存。
3. 必须首先开启服务端,否则客户端建立连接的时候会报java.net.ConnectException: Connection refused: connect
发表评论
-
Netty系列之二、Netty组件
2014-10-12 19:55 0Netty主要由以下几个组件构成: Bootstrap o ... -
Netty系列之二:传输方式
2014-09-17 22:35 0NIO (Non-blocking I/O) io.netty ... -
Java正则表达式实例
2014-08-25 22:50 1934题目: 有两个文件context.txt和words ... -
quartz系列之九:存储
2014-08-05 13:16 0这里以1.8.x为例: 任务 ... -
JVM 四种引用
2014-04-24 19:56 17641. 强引用 指通过普通 ... -
Proxy 源码分析
2014-04-21 10:47 0public class Proxy implements ... -
NIO UDP 编程
2014-04-17 23:18 4251和TCP的SocketChannel类似,UDP的Dat ... -
Matcher 源码分析
2014-04-15 14:45 0首先看下接口: public interface Matc ... -
BTrace 使用
2014-03-20 18:03 0简介 Btrace (Byte Trace)是Sun推出的一款 ... -
NIO Socket 编程
2014-04-11 22:48 1660Java NIO (Nonblocking IO)解决了常规I ... -
hessian系列之二:上传文件
2014-02-17 17:16 6221hessian较早版本通过 byte[] 进行文件传输;4.0 ... -
hessian系列之三:与Spring集成
2014-02-17 20:21 17886Spring封装了hessian客户端和服务端的通用代码,把实 ... -
hessian系列之一:Hello world
2014-01-06 20:51 2296Hessian是一个Web Service的轻量级二进制协议, ... -
XStream:自定义转换器
2013-12-30 22:47 0XStream是一款不错的oxm (Object-XML ma ... -
Http连接工具类
2013-12-28 16:13 0public class HttpConnUtil { ... -
Integer源码分析
2013-12-26 19:59 0private static String toU ... -
全排序
2013-12-23 21:02 0写一个函数, 如 foo(String str), 打印出 s ... -
logback系列之四:输出日志到不同文件
2013-12-03 16:25 69000logback系列之一:输出日志到控制台 logback系列之 ... -
Properties 源码分析
2013-11-26 10:32 01. Properties类扩展了Hashtable,用来保存 ... -
logback系列之三:输出日志到文件(滚动)
2013-11-16 23:37 64406logback系列之一:输出日志到控制台 logback系列之 ...
相关推荐
【Linux网络编程-网络基础-socket编程-高并发服务器】 在深入探讨Linux下的网络编程之前,我们首先要理解网络通信的基础概念——协议。协议是数据传输和解释的规则,它确保了不同设备之间的通信能顺利进行。例如,...
这是两个简单的socket与线程的小例子,一个是单个客户端向服务端发送图片,另外一个是多个客户端向服务端发送图片,例子都是.java文件,复制到eclipse中便可以直接使用的,对于刚刚接触线程与socket网络编程的人,...
这里的“CS”代表Client-Server(客户端-服务器)模型,这是一种常见的网络通信架构。在这种模型中,客户端发起连接请求,而服务器端等待并响应这些请求。在单路情况下,通常意味着一次连接中只有一个数据流,即一个...
本教程将深入探讨Android Socket编程的基本概念、客户端与服务器端的实现以及相关源码解析。 一、Socket基本概念 Socket,也被称为套接字,是网络通信中的一个重要接口,它为两台设备提供双向通信的通道。在Android...
总之,C++的socket编程允许我们构建复杂且高效的网络应用程序,特别是对于需要处理多个并发连接的情况。理解并掌握如何创建多线程服务器以及如何在客户端和服务器之间交换数据,是成为专业IT开发者的关键技能之一。
以及一个客户端类,处理单个客户端的通信逻辑。 - 每个客户端连接可能对应一个线程或任务,以便并发处理多个客户端的请求。 6. **异常处理**: - Socket操作可能会抛出异常,例如`SocketException`,因此必须确保...
Java Socket编程是Java网络编程的重要组成部分,主要用于实现客户端与服务器之间的通信。在本文中,我们将深入探讨Java Socket编程的基础知识,以及如何结合HTML进行交互。 首先,Java Socket是TCP/IP协议族的一...
本主题将深入探讨“网络编程socket-server-多个client”,重点在于如何处理多个客户端连接,利用Linux操作系统和C语言进行高效的服务器设计。在此过程中,我们将特别关注`select`多路复用技术,以及如何在用户空间中...
在客户端-服务器模型中,同步Socket允许应用程序通过发送请求并等待响应来执行通信。以下是对同步Socket及其工作原理的详细说明: 1. **Socket基础知识**:Socket是操作系统提供的一种接口,它允许应用程序进行网络...
5. **网络编程**:Xabber客户端需要与XMPP服务器进行通信,因此需要了解HTTP、TCP/IP协议,以及如何使用Socket编程实现网络连接。 6. **JSON解析**:数据交换通常使用JSON格式,开发者需要熟练使用Gson或Jackson等...
在Microsoft Foundation Classes (MFC) 中进行Socket编程,主要是为了构建基于Windows的网络应用程序,使得它们能够通过Internet或局域网进行通信。MFC提供了一种面向对象的方式来封装Windows的Socket API,使得...
2. Socket编程:Socket是网络通信的基础,它提供了应用程序与网络协议之间的接口。Android客户端可以通过创建Socket连接到服务器,实现双向通信。Socket编程涉及套接字的创建、连接、数据发送和接收,以及异常处理等...
在Linux操作系统中,Socket编程是实现网络通信的基础。Socket接口提供了丰富的函数,使得开发者能够创建、连接、读写网络上的套接字,从而实现不同进程间的数据交换。在这个场景下,我们关注的是如何在Linux环境下...
Socket编程是计算机网络编程中的重要组成部分,主要用于实现进程间的通信。在这个"socket的一个demo,包含服务器与客户端"的示例中,我们将会探讨Java语言如何使用Socket进行网络通信,包括服务器端(Server)和...
- **套接字(socket)**:是网络编程的基本组件,代表了网络上的一个端点。 - **流式套接字**:提供了双向的、可靠的、有序的、无重复并且无记录边界的数据流服务。 - **数据报套接字**:提供了双向的数据报服务,...
Java Socket编程是网络编程的一个重要部分,它允许在网络中的计算机之间进行数据交换。Socket编程是基于TCP/IP协议的,因此了解计算机网络、分组报文和协议对于掌握Socket编程来说至关重要。接下来,我将详细解释...
本文将深入探讨Java中的Socket编程,包括基本概念、工作原理、创建和使用Socket的过程,以及常见问题和解决策略。 1. 基本概念: - Socket(套接字):在计算机网络中,Socket是应用程序通过网络进行通信的接口,...
为了更好地理解上述函数的使用场景,下面简要介绍一个简单的客户端-服务器通信流程: 1. **服务器端**: - 使用`InitPassiveSock`初始化Socket结构体,获取端口号,并创建监听套接字。 - 调用`AcceptConnection`...
在IT领域,网络通信是不可或缺的一部分,...无论是单个客户端还是多个并发客户端,都可以通过适当的编程模式和设计实现稳定、高效的通信。在实际项目中,还要考虑安全性、性能优化以及错误处理,以确保系统的稳定运行。
在多线程的Socket编程中,主线程通常负责监听新进来的连接请求,一旦有新的连接,就会创建一个新的线程来处理这个连接,这样可以避免因为处理单个连接而阻塞其他连接的处理。这种方式称为"一个服务器,多个客户"模型...