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 ...
随机推荐
- [Beginning SharePoint Designer 2010]Chapter4 发布页面
本章概要: 1.SharePoint中的Web内容管理 2.SharePoint发布系统的特性 3.SharePoint发布页面的组成 4.母板页 5.如何构建页面布局和他们潜在的内容类型
- CSU 1541 There is No Alternative (最小生成树+枚举)
题目链接:传送门 题意: 有n个点.m条边.要使n个点所有连起来且要花费最小.问有哪些边是必需要连的. 分析: 要使花费最小肯定是做最小生成树.可是题目要求哪些边是必需要用的.我们能够 这样思考,我们 ...
- python 并发编程入门
多进程 在Unix/Linux下,为我们提供了类似c中<unistd.h>头文件里的的fork()函数的接口,这个函数位于os模块中,相同与c中类似,对于父进程fork()调用返回子进程I ...
- 关于部门后端所有转向java前初步设想
Java服务有些什么形式?眼下来看主要是下面几类: 1. 执行在Web应用server的Servlet 2. Thrift.PB.Avro等相似框架写的java服务 3. WebService( ...
- HDU 2181 DFS
Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每一个城市刚好一次后回到出发的城市. Input 前20行的第i行有3 ...
- JTCalendar
JTCalendar是一款简易使用而且能够自己定义事件的日历.包含圈点标识的颜色等都能够自己定义.demo中还提供了转换日历模式的样例. 效果图: " style="margin: ...
- c# DataTable to Object Mapping
public static class DataTableExtensions { public static IList<T> ToList<T>(this DataTabl ...
- 2014.04.17,转帖,关于FFT的结果为什么要除以N
http://www.chinavib.com/forum/viewthread.php?tid=23665&highlight= 关于这个问题,我看到的书好像都没有进行解释,这里我试着解释下 ...
- python绘制caffe中网络模型
caffe-master/python/draw_net.py 实现绘制caffe中定义的网络模型功能,将.prototxt文件可视化. 需要先安装pydot和protobuf工具 通过Anacond ...
- WIN7把任务栏的的蓝牙图标误删了找回方法
当时我删了以后,在网上找方法,都说—— 点击任务栏下面的三角箭头,选择自定义,里面有蓝牙图标选项,选择显示图标和通知. 可是我发现我的自定义选项里面就没有蓝牙图标选项啊... 故事的最后,我终于找到了 ...