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. 微信公众号 $GLOBALS['HTTP_RAW_POST_DATA']数据问题

    公司的微信公众号最近出现问题,所有的功能都不能用,一开始以为是微信公众号验证的问题,经过排查才发现是$GLOBALS['HTTP_RAW_POST_DATA']这里的问题,微信公众号会把用户的一些操作 ...

  2. VSCode在Ubuntu下快捷键和Windows下不一致的解决办法

    Windows下切换前一次和后一次光标位置,用的快捷键是Alt+<-和Alt+->.很遗憾,Ubuntu下并不是这个快捷键.不清楚为什么VSCode不提供统一的快捷键,但对于我来说,我很想 ...

  3. 【JavaScript】内部与外部引入方式

    1.内部引入方式: script的type属性默认为"text/javascript",可以不写 <script type="text/javascript&quo ...

  4. Mock Server之与被测系统对接(python+flask)

    第一步:获取入参与返回结果 先通过postman.jmeter.自己写脚本之类的方式请求我们的mock server,试着获取入参与对应的返回值,这里我用的是robotframework + Requ ...

  5. CSS实现常用组件特效(不依赖JS)

    我们已经习惯用 JavaScript 实现常见的 UI 功能组件,如手风琴.工具提示.文本截断等.但是随着 HTML 和 CSS 新特性的推出,不用再支持旧浏览器,我们可以越来越少用 JavaScri ...

  6. 24-C#笔记-异常处理

    # 1 语法 try catch finally(相当于catch(...)) using System; ... public void division(int num1, int num2) { ...

  7. Windows:安装Python2.7、3.6与共存,安装pycharm

    Windows:安装Python2.7.3.6与共存,安装pycharm 目录: 1.下载Python2.7.Python3.6 2.安装Python2.7 3.安装Python3.6 4.安装破解p ...

  8. JAVA并发-对象方法wait

    最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java中所有对象的基类,其存在的价值不言而喻,其中wait和notify方法的实现多线程协作提供了保证. ...

  9. UFUN函数 UF_UI UF_PART函数(UF_UI_select_with_class_dialog, UF_PART_export_with_options)

    /*主要演示 UF_PART_export_with_options 这个函数 */1 //设置class_dialog选择过滤 static int init_proc(UF_UI_selectio ...

  10. 遍历List 中 Map 的值

    实现思路: List list = new ArrayList(); Map map = new HashMap(); ;i<list.size;i++){ map=list.get(i); f ...