Socket通信是基于TCP协议进行的传输层通信,是在应用和应用之间的通信,一般应用在即时通讯上。

建立连接

用Socket创建连接需要在客户端和服务端都使用socket套接字。

Linux内存创建Socket,只是创建的socket使用有些差异。

public class EchoServer{
private int port;
Socket socket;
public EchoServer(int port){
this.port = port;
} private void run() throws IOException{
ServerSocket serverSocket = new ServerSocket(port);
while(true){
socket = serverSocket.accept();
new Thread(()->{
write(socket);
}).start();
}
} private void write(Socket socket){
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
int n ;
byte[] b = new byte[1024];
while((n=in.read(b))>0){
out.write(b,0,b.length);
}
}
public void static main(String[] args){
EchoServer server = new EchoServer(7890);
server.run();
}
}
public class EchoClient{
private Socket socket;
private static String host;
private static int port; public EchoClient(String host,int port){
this.host = host;
this.port = port;
} public void run() throws IOException{
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
new Thread(()->{
      int n ;
byte[] b = new byte[1024];
while((n=in.read(b))>0){
System.out.write(b,0,b.length);
}
}).start();
int n ;
byte[] b = new byte[1024];
while((n=System.out.read(b))>0){
out.write(b,0,n);
}
}
public void static main(String[] args){
EchoClient client = new EchoClient("localhost",7890);
client.run(); }
}

  

一种Socket的用处是监听,叫做ServerSocket,这种Socket会调用listen的方法,监听连接上的套接字。

另一种socket的用处是连接,它调用connect方法,作用为服务端和客户端的通讯连接套字。

一个完整的TCP通信,在服务端和客户端总计创建三个socket。

一个监控的socket在服务端监控连接成功的客户端套接字,并在接收连接后产生一个连接的socket.

一个连接的socket在客户端请求发起连接。

基于TCP实现的Socket通讯详解的更多相关文章

  1. TCP/IP协议、HTTP协议、SOCKET通讯详解

    1.TCP连接TCP(Transmission Control Protocol) 传输控制协议.TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握确认建立一个连接.位码即tcp标志位 ...

  2. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  3. IOS 基于TCP的socket通信详解(原创)

    最近在整理通信层相关知识,这篇文章是边整理边写的,有些地方可能不够准确,还请各位路过的大牛专家指出来.这次整理的socket通信是基于TCP的,实现方式是GCD形式,以下记录的都是些理论知识,方便自己 ...

  4. Socket 死连接详解

    Socket 死连接详解 当使用 Socket 进行通信时,由于各种不同的因素,都有可能导致死连接停留在服务器端,假如服务端需要处理的连接较多,就有可能造成服务器资源严重浪费,对此,本文将阐述其原理以 ...

  5. java网络编程Socket通信详解

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  6. socket原理详解

    1.什么是socket 我们知道进程通信的方法有管道.命名管道.信号.消息队列.共享内存.信号量,这些方法都要求通信的两个进程位于同一个主机.但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机 ...

  7. Android Socket通信详解

    一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客 ...

  8. socket接口详解

    1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...

  9. c/c++ socket函数详解

    c/c++ socket函数详解 注意: 使用socketAPI前,要先将相关链接库(Ws2_32.lib)加入链接,并使用WSAStartUp函数初始化.每个socket函数都可能失败(返回-1), ...

随机推荐

  1. 一文搞定PGA_LGA_BGA

    概述 什么是LGA.PGA.BGA类型的封装?众所周知,CPU封装的类型主要为三种:LGA,PGA,BGA,其中LGA封装是最常见的,intel处理器都是采用这种类型的封装,而PGA封装则是AMD常用 ...

  2. XGBoost使用教程(与sklearn一起使用)二

    一.导入必要的工具包# 运行 xgboost安装包中的示例程序from xgboost import XGBClassifier # 加载LibSVM格式数据模块from sklearn.datase ...

  3. opencv 程序

    IplImage结构中的一个元素:struct _IplROI *roi; //图像感兴趣区域,当该值非空时,只对该区域进行处理 .   ROI :Region of Interest,表示感兴趣的区 ...

  4. error: Libtool library used but 'LIBTOOL' is undefined

    编译时出现: error: Libtool library used but ‘LIBTOOL’ is undefined 参考了一下: http://stackoverflow.com/questi ...

  5. 绘制指引线的JS库leader-line

    前言 之前看到一篇推荐Magi这个搜索引擎的新闻,对于这个搜索引擎是否好用咱们不予置评,但是我在这个搜索引擎上面发现了一个好玩的前端功能. 如上图,将鼠标浮动到学习来源上时,会展示一堆指引线. 本博客 ...

  6. python类定义的讲解

    python是怎么定义类的,看了下面的文章大家就会了,不用多说,开始学习. 一.类定义: 复制代码代码如下: class <类名>: <语句> 类实例化后,可以使用其属性,实际 ...

  7. SpringBoot——配置文件详解【五】

    前言 SpringBoot的配置文件 配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的. application.properties application.yml 配置文件 ...

  8. Python并发编程之进程通信

    ''' 进程间的通信 ''' """ multiprocessing模块支持进程间通信的两种主要形式:管道和队列 都是基于消息传递实现的, ""&qu ...

  9. VIJOS-P1294 拯救OIBH总部

    洛谷 P1506 拯救oibh总部 洛谷传送门 JDOJ:1405: VIJOS-P1294 拯救OIBH总部 JDOJ传送门 Description OIBH被突来的洪水淹没了> .< ...

  10. String数组转int数组

    假设我们有一个字符串数组: String[] strings = {"1", "2", "3"}; 使用Lambda表达式(自Java 8起 ...