Socket实现一个简单的半双工通信
Socket是client进行在网络与server进行数据交互的一种基本通信方式。通信有三种通信。即单工。半双工,和全双工。
所谓单工,就是仅仅可以进行单向通信,如bb机。
而半双工就是一来一回的通信方式,如对讲机。
全双工也是最经常使用的,就是现实长连接实时通信。如QQ。
假设理解了上面的三个工作方式,那以下就以半双工为例,分析一下其工作的流程:
首先:在server端建立一个监听端口,没有多么复杂,就相当于一个等待连接的东西。
第二步:这时候,假设在client的话,要想去连接上面的server。就要去用相应的方法发送一个请求。意思是让server把这个端口打开,建立通信。
第三步:server接受到client发送的请求,会建立连接。这个很重要,真正意义上的通信也就開始了。
第四步:上面的连接完毕之后,客服端開始向server端发送相应的数据信息。
第五步:server接收到数据。
第六步:接收到数据之后,进行处理。返回结果。
第七步:客服端接收到结果信息。
总而言之,上面的步骤依照我的总结就是:
连接——–发送数据——-接收数据——处理——返回数据—–client接收—————循环下去。
以下是一个实现半双工的简单实例:
server端:
package test1;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
public class Server1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Server1 ms1=new Server1();
}
public Server1(){
try {
// 实例化
ServerSocket p1=new ServerSocket(9999);
// 等待接收一个连接
Socket s=p1.accept();//返回一个socket连接
// 接收数据
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
String info=br.readLine();
System.out.println("server接收到:"+info);
// server返回数据向client发送
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
pw.println("这是server返回的数据");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
client:
package test1;
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Client1 p2=new Client1();
}
public Client1(){
try {
// 连接某一个server端ip/端口号
Socket s=new Socket("127.0.0.1",9999);
// 发送数据,true是即时刷新
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
pw.println("这是client发送的数据");
// client接收到返回的数据
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
String response=br.readLine();
System.out.println("client收到"+response);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Socket实现一个简单的半双工通信的更多相关文章
- C#socket编程之实现一个简单的TCP通信
TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...
- socket编程——一个简单的样例
从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server client ++ ...
- socket计划——一个简单的例子
从一个简单易用TCP样品开始socket计划,的基本过程例如下列: server client +++ ...
- socket编程——一个简单的例子
从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server client ++++ ...
- 使用Socket模拟一个简单的Webservice调用
webservice是对socket的一个封装,让远程调用调用变得更加简单,那么使用socket究竟有多么麻烦呢?来看看. 做一个简单的天气查询: 服务端: public class SocketSe ...
- Socket——实现一个简单的静态网页服务器
整体结构就是使用ServerSocket监听一个地址,当有接受到请求之后,解析请求中的资源路径.服务器资源路径存放在项目下的一个目录中,服务器会到这个目录中根据请求的路径去寻找相应的资源.如果找到了则 ...
- socket实现一个简单的echo服务
服务端的实现: public class EchoServer{ //创建一个serverSocket private final ServerSocket serverSocket; //创建一个构 ...
- 用socket写一个简单的客户端和服务端程序
用来练手写写socket代码 客户端代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h ...
- 用socket写一个简单的服务器
import socketsk=socket.socket()sk.bind(("127.0.0.1",7001))sk.listen()def login(url): with ...
随机推荐
- Hadoop(2)_机器信息分布表
1.分布式环境搭建 采用4台安装Linux环境的机器来构建一个小规模的分布式集群. 图1 集群的架构 其中有一台机器是Master节点,即名称节点,另外三台是Slaver节点,即数据节点.这四台机器彼 ...
- Eclipse中项目去除Js验证
删除项目.project文件中的 <buildCommand> <name>org.eclipse.wst.jsdt.core.javascriptValidator< ...
- 页面安装Jre
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="0" height ...
- crm2013使用图片字段
在CRM2013能够加入图片字段(一个实体仅仅能加入一个图片字段) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveV9mMTIz/font/5a6L5L2 ...
- 本地自旋锁与信号量/多服务台自旋队列-spin wait风格的信号量
周日傍晚,我去家附近的超市(...)买苏打水,准备自制青柠苏打.我感觉我做的比买的那个巴黎水要更爽口.由于天气太热,非常多人都去超市避暑去了,超市也不撵人,这仿佛是他们的策略.人过来避暑了,走的时候难 ...
- spring batch(一):基础部分
spring batch(一):基础部分 博客分类: Spring java spring batch 官网: http://www.springsource.org/spring-batch 下 ...
- 从git源码安装zabbix-agent
从网上随便找了几个image,都是从svn下载的代码,根本跑不了,于是自己重新做了个,从git上拿的源码,只是build出来的image有点大,有时间再优化了 Dockerfile FROM cent ...
- TimSort学习资料
深入理解 timsort 算法(1):自适应归并排序 如何找出Timsort算法和玉兔月球车中的Bug? Java TimSort算法 源码 笔记 Timsort https://en.wikiped ...
- 主流的Python领域和框架--转
原文地址:https://www.zhihu.com/question/19899608
- js闭包概念
含义:闭包是一个概念,它描述了函数执行完毕内存释放后,依然内存驻留的一个现象,只要把握这个核心概念,闭包就不难理解了 function a(){ var i=0; function ...