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实现一个简单的半双工通信的更多相关文章

  1. C#socket编程之实现一个简单的TCP通信

    TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...

  2. socket编程——一个简单的样例

    从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server                                                  client ++ ...

  3. socket计划——一个简单的例子

    从一个简单易用TCP样品开始socket计划,的基本过程例如下列: server                                                  client +++ ...

  4. socket编程——一个简单的例子

    从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server                                                  client ++++ ...

  5. 使用Socket模拟一个简单的Webservice调用

    webservice是对socket的一个封装,让远程调用调用变得更加简单,那么使用socket究竟有多么麻烦呢?来看看. 做一个简单的天气查询: 服务端: public class SocketSe ...

  6. Socket——实现一个简单的静态网页服务器

    整体结构就是使用ServerSocket监听一个地址,当有接受到请求之后,解析请求中的资源路径.服务器资源路径存放在项目下的一个目录中,服务器会到这个目录中根据请求的路径去寻找相应的资源.如果找到了则 ...

  7. socket实现一个简单的echo服务

    服务端的实现: public class EchoServer{ //创建一个serverSocket private final ServerSocket serverSocket; //创建一个构 ...

  8. 用socket写一个简单的客户端和服务端程序

    用来练手写写socket代码 客户端代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h ...

  9. 用socket写一个简单的服务器

    import socketsk=socket.socket()sk.bind(("127.0.0.1",7001))sk.listen()def login(url): with ...

随机推荐

  1. [SharePoint][SharePoint Designer 入门经典]Chapter7 数据源和外部内容类型

    本章概要: 1.SharePoint能够使用的数据类型 2.如何从SharePoint列表和库中取得数据并展现出来 3.SharePoint访问远程数据 4.如何把外部数据源作为列表展现在你的SPS站 ...

  2. 关于ZipOupputStream添加压缩包常见问题

    其实园子压缩解压缩的方法很多,ZipOupputStream这个类的说明很多,我这边也是从网上找的代码,但是我在压缩的时候遇到了常见的两个问题,第一个就是压缩的时候读取压缩包报该压缩包已经在另一个进程 ...

  3. iframe是否缓存页面探究

    近期手里有个项目须要用iframe来调用每天都会变化的页面,后来想到iframe会不会缓存页面呢.于是写了个demo论证了下,结果例如以下: iframe的src假设是静态页面,就有可能会缓存.由于静 ...

  4. Manarcher 求 字符串 的最长回文子串 【记录】

    声明:这里仅仅写出了实现过程.想学习Manacher的能够看下这里给出的实现过程,算法涉及的一些原理推荐个博客. 给个链接 感觉讲的非常细 引子:给定一个字符串s,让你求出最长的回文子串的长度. 算法 ...

  5. CentOS 6 安装最新的 Redis 2.8 ,安装 TCMalloc

    1,遇到的问题就是 redis 2.8 版本号依赖 Google 的 TCMalloc TCMalloc(Thread-Caching Malloc)是google开发的开源工具──"goo ...

  6. poj--1383--Labyrinth(树的直径)

    Labyrinth Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 4062   Accepted: 1529 Descrip ...

  7. Solidworks.2016.SP5下载安装破解图文教程

    安装此软件一定要断网安装!!!下载完成后解压文件,打开破解文件夹,双击文件夹中的SolidWorksSerialNumbers2016.reg进行注册表注册,如下图.   解压软件安装包(或者将软件安 ...

  8. composer的一些操作

    版本更新 命令行下:composer self-update 设置中国镜像 composer config -g repo.packagist composer https://packagist.p ...

  9. 洛谷P1962 斐波那契数列(矩阵快速幂)

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...

  10. 一个javascript面试题解析

    ; function fn(){ console.log(this.length); } var obj = { length: , method: function (fn) { fn(); // ...