- 浏览: 275640 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1306关于一致性hash的讲解有很多,也不难理解,具体可以翻看其他 ... -
java.util.Timer源代码解读
2018-04-03 21:26 1460相关类: Timer : 创建定时任务调度的主类 ... -
jdbc的ResultSet结果集,数字类型的null取出后为0
2017-03-06 19:14 7327数据库里面的int,decimal等类型的字段值为null, ... -
Java中Thread的Interrupt与终止线程
2017-03-05 18:14 3726有时候我们会需要将正在执行的线程进行打断,可能我们会想到使 ... -
java中的Thread类的join
2017-03-05 16:43 2312join是Thread的实例方法,官方解释为:等待该线程终 ... -
Java的Thread,Runnable、Callable、Future、FutureTask、Executors,ExecutorService
2017-03-05 09:53 1289定义解释 Runnable ... -
springMVC响应json结果生成is开头的属性
2017-02-14 16:45 1086本来在开发中尽量不用以is开头的变量名的,但是因为开发中用 ... -
springMVC源码解读总结
2017-02-13 20:05 761HandlerMapping负责管理Web请求到具体的处 ... -
跳出多重for循环
2017-02-10 13:29 12191、变量标记形式,循环层级太多比较麻烦。 boolean ... -
Calender不是单例
2014-11-19 08:39 1838在我们使用Calender的时候,使用过 ... -
java中的值传递,引用传递
2014-11-19 08:14 1497无意中看到一个问题,java是值传递还是引 ... -
java设计模式-单例模式
2014-11-17 22:00 915单例模式1,饿汉模式 //饿汉式单例类 ... -
jacob操作office分享
2014-07-29 16:54 46776现在的项目中操作word文件比较多,word文件的加密解 ... -
java多线程编程记录(一)
2012-08-22 11:15 1259参考:http://hi.baidu.com/xiaolinc ... -
java设计模式- Factory Method(工厂方法)模式
2012-08-20 14:24 1967Factory Method定义 ... -
java设计模式- abstract Factory (抽象工厂)模式
2012-08-20 11:32 4624Abstract Factory定义 为一系列相 ... -
java设计模式-Adapter(适配器)模式
2012-08-20 09:33 1232参考:http://www.java3z.com/cw ... -
java设计模式-Visitor(访问者)模式
2012-08-17 15:46 1848visitor定义 作用于某个对象群中各 ... -
java设计模式-Mediator(中介者)模式
2012-08-17 12:44 7179Mediator中介者模式定义 Mediator ... -
java设计模式-Template Method(模板方法)模式
2012-08-17 09:33 1112模板是指在薄片塑料板上面写字后挖空,再使用毛笔或 ...
相关推荐
主要介绍了Java基于socket实现的客户端和服务端通信功能,结合完整实例形式分析了Java使用socket建立客户端与服务器端连接与通信功能,需要的朋友可以参考下
java socket编程 服务器和客户端 客户端向服务器发送0~99整数,服务器接收后乘以2发给客户端
作为一个java初学者 去学习socket 本源代码可以 拿到eclipse中去学习 很容易上门 对于初级的学习者来说 使用他是很有必要多找些好的代码的
由于需求原因,socket通讯采用 ,net 作为服务器端不断监听java做为客户端发送来的信息。.net 服务器端采用线程方式接收多个客户端连接。已经测试通过。
刚刚学习socket的时候编写的程序,可以实现客户端连续向服务器发送三个数据,服务器端连续接受三个数据并返回给客户端处理结果
socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户...
socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户...
Java中Socket通信-服务端和客户端双向传输字符串实现示例代码。在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的...
java写的socket客户端,能实现接收服务器端数据,发送数据到服务器端,断线自动重连
使用JAVA编写一个使用TCP协议传输文件的Socket,实现客户端向服务器端发送一个文件,服务器端接收之后按相同的文件名在指定的目录下保存文件
如何判断SOCKET通信中,客户端在10s内未发送数据或者未收到服务器发送的数据,自动
Socket通信技术。利用到了Thread技术,完成了,服务器开启,一直监听客户端功能,两点是,当服务器端断开后重新打开后,客户端能自动链接到服务器端,由于网络原因最多延迟2分钟
编程实现:利用Java网络包中套接字类Socket和服务者套接字类SeverSocket实现如下功能:服务器端的程序等待客户端的输入,然后将客户端的输入回显给客户端,同时在服务器端的控制台输出。而客户端从控制台接收输入后...
socket分为socketserver和socketclient,socketserver是一个简单的建立长连接后等待接收数据,socketclient请求建立与服务端连接,连接建立以后通过servlet发起通信。 服务端直接用application执行; 客户端部署到...
SocketTool调试软件是一...★ 支持16进制的发送和16进制接收显示,支持汉字以及文本发送 ★ 用户可以方便的把接收到的数据保存下来 ★ 支持发送、接收字节数统计 ★ 支持数据循环发送,同一内容可自动发送1次至10000次
Java编写的上传图片的客户端与服务端,服务端采用多线程。
本资源使用了java语音编写,利用传输二进制的方式发送数据和二进制解析数据,实现了客户端给服务器端发送消息,服务器端解析数据,服务器端发送消息给客服端,客户端解析数据。
网络调试助手(NetAssist)java socket 通讯代码 可聊天。 网络调试助手(NetAssist)java socket通讯代码,java代码,有看不懂的...自己编写的JAVA程序,作为服务器端,接收客户端发来的消息,并且实时输出至控制台。
ChatRoom.java 为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java 亲密合作。 Windowclose 为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。 Clock...