基于TCP实现的Socket通讯详解
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通讯详解的更多相关文章
- TCP/IP协议、HTTP协议、SOCKET通讯详解
1.TCP连接TCP(Transmission Control Protocol) 传输控制协议.TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握确认建立一个连接.位码即tcp标志位 ...
- 闲来无事,写个基于TCP协议的Socket通讯Demo
.Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...
- IOS 基于TCP的socket通信详解(原创)
最近在整理通信层相关知识,这篇文章是边整理边写的,有些地方可能不够准确,还请各位路过的大牛专家指出来.这次整理的socket通信是基于TCP的,实现方式是GCD形式,以下记录的都是些理论知识,方便自己 ...
- Socket 死连接详解
Socket 死连接详解 当使用 Socket 进行通信时,由于各种不同的因素,都有可能导致死连接停留在服务器端,假如服务端需要处理的连接较多,就有可能造成服务器资源严重浪费,对此,本文将阐述其原理以 ...
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- socket原理详解
1.什么是socket 我们知道进程通信的方法有管道.命名管道.信号.消息队列.共享内存.信号量,这些方法都要求通信的两个进程位于同一个主机.但是如果通信双方不在同一个主机又该如何进行通信呢?在计算机 ...
- Android Socket通信详解
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客 ...
- socket接口详解
1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...
- c/c++ socket函数详解
c/c++ socket函数详解 注意: 使用socketAPI前,要先将相关链接库(Ws2_32.lib)加入链接,并使用WSAStartUp函数初始化.每个socket函数都可能失败(返回-1), ...
随机推荐
- JMETER 使用断言
断言概念 断言就是在执行某个请求后,根据返回的结果,判断返回是否正确,如果不正确,则表示事务失败. 添加断言 启动流程时返回的数据是一个 json对象,结构为 {success:true,msg:&q ...
- Flask 中内置的 Session 应用
目录 1.Flask 中 session 是需要 secret_key 的 2.session抛异常 3.session 用法: 4.验证session Flask中的Session非常的奇怪,他会将 ...
- centos自动同步服务器时间
原文:https://my.oschina.net/yysue/blog/1628733 1.安装ntpdate yum install ntpdate -y 2.测试是否正常 ntpdate cn. ...
- flask的客户端服务端
1.首先要进行后端与前端的连接有get 和post请求 get请求是直接在网页上打出已将定义好的网址 if __name__ == '__main__': app.run(host="loc ...
- Python问题:SyntaxError: Non-ASCII character '\xe2' in file
SyntaxError: Non-ASCII character '\xe2' in file意思是说,在文件中存在非ASCII字符: ASCII是8位即一个字符,一共256个字符,随着计算机的发展, ...
- ubuntu使用anaconda安装tensorflow
https://blog.csdn.net/shiheyingzhe/article/details/80863422 https://blog.csdn.net/sheyanshangjiang/a ...
- hdu1005-Number Sequence-(循环节)
题意:已知f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7,给出A,B,n,求f(n) 题解:n巨大,循环肯定超时,在模7的 ...
- 破解优酷VIP视频
目录 一 破解优酷VIP视频 一 破解优酷VIP视频 import requests import re import json HEADERS = { 'user-agent': 'Mozilla/ ...
- LCD12864
/* LCD Arduino PIN1 = GND PIN2 = 5V RS(CS) = 8; RW(SID)= 9; EN(CLK) = 3; PIN15 PSB = GND; */ #includ ...
- Candy Treasure Box
This is an interesting puzzle game. In the game, you need to use your brain, think carefully, operat ...