- 浏览: 278210 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
typ0520:
推荐一个socket编程的异步socket类库,https:/ ...
java之Scoket 客户端和服务器的发送与接收 -
GGGGeek:
处理excel的时候,列太多,已经把pdf设置横向,依然不行, ...
jacob操作office分享 -
men4661273:
小白马 写道能不能发一下源代码啊https://git.osc ...
android自定义popupwindow仿微信 -
贝塔ZQ:
不错不错,总结的挺好的。插件实现也是不错的,PageOffi ...
jacob操作office分享 -
小白马:
能不能发一下源代码啊
android自定义popupwindow仿微信
什么是socket
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
以JDK-1.6为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
重要的Socket API:
java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.6文档。
. Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
. getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。
. getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
客户端和服务器端通过socket发送消息和接收消息的过程:
接收消息的过程
发送消息的过程
客户端:
服务器端:
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
以JDK-1.6为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
重要的Socket API:
java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.6文档。
. Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。
. getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。
. getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
客户端和服务器端通过socket发送消息和接收消息的过程:
接收消息的过程
发送消息的过程
客户端:
package com.jysd.client; 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 Client { public void go() throws UnknownHostException, IOException{ //向服务器端发送请求,服务器IP地址和服务器监听的端口号 Socket client = new Socket("127.0.0.1", 4242); //通过printWriter 来向服务器发送消息 PrintWriter printWriter = new PrintWriter(client.getOutputStream()); System.out.println("连接已建立..."); //发送消息 printWriter.println("hello Server"); printWriter.flush(); //InputStreamReader是低层和高层串流之间的桥梁 //client.getInputStream()从Socket取得输入串流 InputStreamReader streamReader = new InputStreamReader(client.getInputStream()); //链接数据串流,建立BufferedReader来读取,将BufferReader链接到InputStreamReder BufferedReader reader = new BufferedReader(streamReader); String advice =reader.readLine(); System.out.println("接收到服务器的消息 :"+advice); reader.close(); } public static void main(String[] args) throws UnknownHostException, IOException { Client c = new Client(); c.go(); } }
服务器端:
package com.jysd.server; 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 Server { private ServerSocket ss; private InputStreamReader inputStreamReader; private BufferedReader bufferedReader; public void server(){ try { //让服务器端程序开始监听来自4242端口的客户端请求 if (ss==null) { ss = new ServerSocket(4242); System.out.println("服务器启动..."); } //服务器无穷的循环等待客户端的请求 while(true){ /* *accept()方法会在等待用户的socket连接时闲置着,当用户链接 *上来时,此方法会返回一个socket(在不同的端口上)以便与客户端 *通信。Socket与ServerSocket的端口不同,因此ServerSocket可以 *空闲出来等待其他客户端 */ //这个方法会停下来等待要求到达之后再继续 Socket s = ss.accept(); inputStreamReader = new InputStreamReader(s.getInputStream()); bufferedReader = new BufferedReader(inputStreamReader); String request = bufferedReader.readLine(); System.out.println("接收到了客户端的请求:"+request); PrintWriter printWriter = new PrintWriter(s.getOutputStream()); String advice = "I am Server"; printWriter.println(advice); printWriter.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); server.server(); } }
评论
2 楼
typ0520
2017-06-15
推荐一个socket编程的异步socket类库,https://github.com/typ0520/bizsocket,对一些业务场景做了支持
断线重连
一对一请求
通知、粘性通知
串行请求合并
包分片处理
缓存
拦截器
支持rxjava,提供类似于retrofit的支持
断线重连
一对一请求
通知、粘性通知
串行请求合并
包分片处理
缓存
拦截器
支持rxjava,提供类似于retrofit的支持
1 楼
gudaolang
2012-12-20
怎么能将服务器反馈的信息完全读取啊?
发表评论
-
一致性hash的Java实现
2018-04-07 11:57 1362关于一致性hash的讲解有很多,也不难理解,具体可以翻看其他 ... -
java.util.Timer源代码解读
2018-04-03 21:26 1531相关类: Timer : 创建定时任务调度的主类 ... -
jdbc的ResultSet结果集,数字类型的null取出后为0
2017-03-06 19:14 7408数据库里面的int,decimal等类型的字段值为null, ... -
Java中Thread的Interrupt与终止线程
2017-03-05 18:14 3763有时候我们会需要将正在执行的线程进行打断,可能我们会想到使 ... -
java中的Thread类的join
2017-03-05 16:43 2380join是Thread的实例方法,官方解释为:等待该线程终 ... -
Java的Thread,Runnable、Callable、Future、FutureTask、Executors,ExecutorService
2017-03-05 09:53 1341定义解释 Runnable ... -
springMVC响应json结果生成is开头的属性
2017-02-14 16:45 1139本来在开发中尽量不用以is开头的变量名的,但是因为开发中用 ... -
springMVC源码解读总结
2017-02-13 20:05 801HandlerMapping负责管理Web请求到具体的处 ... -
跳出多重for循环
2017-02-10 13:29 13191、变量标记形式,循环层级太多比较麻烦。 boolean ... -
Calender不是单例
2014-11-19 08:39 1908在我们使用Calender的时候,使用过 ... -
java中的值传递,引用传递
2014-11-19 08:14 1543无意中看到一个问题,java是值传递还是引 ... -
java设计模式-单例模式
2014-11-17 22:00 964单例模式1,饿汉模式 //饿汉式单例类 ... -
jacob操作office分享
2014-07-29 16:54 46944现在的项目中操作word文件比较多,word文件的加密解 ... -
java多线程编程记录(一)
2012-08-22 11:15 1321参考:http://hi.baidu.com/xiaolinc ... -
java设计模式- Factory Method(工厂方法)模式
2012-08-20 14:24 2011Factory Method定义 ... -
java设计模式- abstract Factory (抽象工厂)模式
2012-08-20 11:32 4672Abstract Factory定义 为一系列相 ... -
java设计模式-Adapter(适配器)模式
2012-08-20 09:33 1271参考:http://www.java3z.com/cw ... -
java设计模式-Visitor(访问者)模式
2012-08-17 15:46 1890visitor定义 作用于某个对象群中各 ... -
java设计模式-Mediator(中介者)模式
2012-08-17 12:44 7209Mediator中介者模式定义 Mediator ... -
java设计模式-Template Method(模板方法)模式
2012-08-17 09:33 1147模板是指在薄片塑料板上面写字后挖空,再使用毛笔或 ...
相关推荐
下面是一个简单的Java Socket客户端示例,用于连接到一个聊天服务器: ```java import java.io.*; import java.net.*; public class ChatClient { public static void main(String[] args) { try (Socket socket...
总的来说,Java的Socket类是实现网络通信的基础,通过创建Socket实例,我们可以与远程服务器建立连接,进行数据的发送和接收。了解和熟练掌握Socket类的使用,对于编写任何基于TCP协议的网络应用程序都是至关重要的...
在客户端和服务器端之间,数据的发送和接收是通过DataOutputStream和DataInputStream来实现的。DataOutputStream用来将数据写入到Socket的输出流中,DataInputStream用来从Socket的输入流中读取数据。 总结 本文...
在Java中,通过`java.net.Socket`类来表示客户端,`java.net.ServerSocket`类来表示服务器端。本案例实现了基于TCP协议的Socket长连接,即客户端和服务端建立连接后,保持连接状态,进行多次数据交互而无需频繁建立...
### 计算机网络编程socket客户端与服务器通讯 #### 概述 计算机网络编程是现代互联网技术的基础之一,其中socket编程是一种重要的实现方式。本文将详细介绍一个基于Android客户端与服务器之间进行socket通信的设计...
在Java中,我们可以使用Java的Socket类和ServerSocket类来构建客户端和服务器端的通信。在这个场景中,我们将讨论如何使用Java实现一个简单的文件传输功能,即客户端通过Socket连接将文件发送到服务器。 首先,我们...
在IT领域,网络编程是不可或缺的一部分,而Socket编程则是实现网络...连续发送和接收数据的场景在许多应用中都很常见,比如文件传输、在线聊天等。通过理解和掌握Socket编程,开发者可以构建出高效且可靠的网络应用。
Socket编程是Java提供的一个标准接口,它允许应用程序通过网络发送和接收数据。在这个程序中,我们将探讨以下几个核心知识点: 1. **Java Socket类**: Java中的Socket类代表了TCP/IP协议中的套接字,它是连接到...
以上就是关于"Socket客户端向服务端发送数据"的相关知识点,涵盖了Socket通信的基本原理、操作流程以及客户端和服务器端的实现细节。通过理解这些知识,开发者可以构建自己的Socket通信系统,实现自定义的网络服务。
Java Socket API提供了一对`InputStream`和`OutputStream`接口,允许开发者以字节流的形式发送和接收数据。 在实际应用中,客户端和服务器通常会使用这些输入/输出流进行更复杂的交互,例如通过`DataInputStream`和...
// 数据发送和接收代码 } catch (IOException e) { e.printStackTrace(); } ``` 2. **关闭资源**:完成通信后,记得关闭Socket及其相关的输入输出流,释放资源: ```java finally { try { if (socket != null)...
Socket分为服务器端(Server Socket)和客户端(Client Socket),服务器端通常监听特定的端口,等待客户端的连接请求,而客户端则发起连接请求,一旦连接建立,双方就可以通过Socket发送和接收数据。 在这个项目中...
本教程将详细讲解如何利用Java Socket实现基于TCP/IP的服务端和客户端之间的报文发送与接收。 TCP(传输控制协议)是一种面向连接、可靠的传输协议,它确保了数据包的有序和无损传输。IP(互联网协议)则是互联网上...
这个客户端能够连接到特定的服务器地址,并通过连接发送和接收数据。在学习Socket编程时,这样的例子有助于理解客户端的生命周期,包括连接建立、数据交换和连接关闭的过程。 描述中的"SOCKET客户端程序"简单明了地...
客户端创建Socket实例,指定服务器的IP和端口,然后通过Socket的`getOutputStream()`和`getInputStream()`方法获取数据输出流和输入流,进行数据发送和接收。服务器端创建ServerSocket实例,指定监听端口,然后调用`...
2. **客户端(Client.java和HttpClient.java)**:客户端首先创建一个Socket,指定服务器的IP地址和端口号: ```java Socket socket = new Socket("localhost", 8080); ``` 接着,客户端同样通过Socket的输入输出...
4. **调试与测试**:在Eclipse中,可以利用其强大的调试工具来测试客户端和服务器之间的通信。设置断点,观察变量值的变化,检查输入/输出流的内容,以确保数据正确传输。 5. **安全考虑**:在实际应用中,可能需要...
在Android开发中,Socket通信是实现设备间网络通信的一种常见方式...以上就是关于Android开发中Socket Client端和Socket Server端数据发送和接收的核心知识点。理解并掌握这些内容,将有助于构建稳定的跨设备通信系统。
- Socket类提供了与之相关的输入流和输出流,用于在网络中进行数据的读写操作。客户端通过Socket的输出流将文件内容写入网络,服务器端则通过输入流接收这些数据。 5. **多线程处理**: - 为了处理多个并发的...
总结,Socket编程是网络通信的核心技术之一,理解和掌握Socket客户端和服务器端的实现,有助于开发跨平台的网络应用。通过创建ServerSocket和Socket,以及使用输入输出流进行数据交换,我们可以构建出可靠且高效的...