Socket编程

SpringBoot+SOCKET服务端客户端 通过以下两个类实现了springboot启动类,启动socket服务端 SOCKET客户端连接测试 模拟测试客户端连接-主测试类 可以使用线程池或者多个线程类start都可以就是我注释的地方 模拟监测服务心跳线程类 补充一下目录结构分布 是先启动springboot在启动客户端连接服务 服务端打印客户端发来的业务数据消息 客户端发送消息,并且接收服务端反馈的消息打印结果 我们开了两个客户端socket一个是心跳socket一个是业务socket 我们在客户端socket敲入任意信息可以在服务端输出打 阅读详情


一、网络各个协议:TCP/IP、SOCKET、HTTP等

网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

其中物理层、数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象;

传输层、会话层、表示层和应用层则被称作主机层,是用户所面向和关心的内容。

 http协议   对应于应用层 

 tcp协议    对应于传输层  

 ip协议     对应于网络层 

 三者本质上没有可比性。  何况HTTP协议是基于TCP连接的。 

 TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。

 我 们在传输数据时,可以只使用传输层(TCP/IP),但是那样的话,由于没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用应用层 协议,应用层协议很多,有HTTP、FTP、TELNET等等,也可以自己定义应用层协议。WEB使用HTTP作传输层协议,以封装HTTP文本信息,然 后使用TCP/IP做传输层协议将它发送到网络上。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

二、Http和Socket连接区别

 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。

2.1、TCP连接

要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。

建立起一个TCP连接需要经过“三次握手”:

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握 手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连 接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客 户端交互,最终确定断开)

2.2、HTTP连接

HTTP协议即超文本传送协议(HypertextTransfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

由 于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

三、SOCKET原理

3.1、套接字(socket)概念

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

应 用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应 用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

3.2 、建立socket连接

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

连 接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

 3.3、SOCKET连接与TCP连接

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

 3.4、Socket连接与HTTP连接

由 于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用 中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。

而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

很 多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给 客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以 保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

这里我们使用Socket实现一个聊天室的功能,关于服务器这里的就不介绍了

一:再头文件中第一输入流和输出流和一个消息数组

 

 1 @interface ViewController ()<NSStreamDelegate,UITextFieldDelegate,UITableViewDataSource,UITableViewDelegate>{
 2     NSInputStream *_inputStream;//对应输入流
 3     NSOutputStream *_outputStream;//对应输出流
 4 }
 5 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *inputViewConstraint;
 6 @property (weak, nonatomic) IBOutlet UITableView *tableView;
 7 
 8 @property (nonatomic, strong) NSMutableArray *chatMsgs;//聊天消息数组
 9 
10 @end

 

懒加载这个消息数组

1 -(NSMutableArray *)chatMsgs{
2     if (!_chatMsgs) {
3         _chatMsgs = [NSMutableArray array];
4     }
5     
6     return _chatMsgs;
7 }

二:实现输入输出流的监听

 1 -(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
 2     NSLog(@"%@",[NSThread currentThread]);
 3 
 4 //    NSStreamEventOpenCompleted = 1UL << 0,//输入输出流打开完成
 5 //    NSStreamEventHasBytesAvailable = 1UL << 1,//有字节可读
 6 //    NSStreamEventHasSpaceAvailable = 1UL << 2,//可以发放字节
 7 //    NSStreamEventErrorOccurred = 1UL << 3,// 连接出现错误
 8 //    NSStreamEventEndEncountered = 1UL << 4// 连接结束
 9     switch (eventCode) {
10         case NSStreamEventOpenCompleted:
11             NSLog(@"输入输出流打开完成");
12             break;
13         case NSStreamEventHasBytesAvailable:
14             NSLog(@"有字节可读");
15             [self readData];
16             break;
17         case NSStreamEventHasSpaceAvailable:
18             NSLog(@"可以发送字节");
19             break;
20         case NSStreamEventErrorOccurred:
21                         NSLog(@" 连接出现错误");
22             break;
23         case NSStreamEventEndEncountered:
24              NSLog(@"连接结束");
25             
26             // 关闭输入输出流
27             [_inputStream close];
28             [_outputStream close];
29             
30             // 从主运行循环移除
31             [_inputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
32             [_outputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
33             break;
34         default:
35             break;
36     }
37     
38 }

三:链接服务器

 1 - (IBAction)connectToHost:(id)sender {
 2     // 1.建立连接
 3     NSString *host = @"127.0.0.1";
 4     int port = 12345;
 5     
 6     // 定义C语言输入输出流
 7     CFReadStreamRef readStream;
 8     CFWriteStreamRef writeStream;
 9     CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream);
10     
11     // 把C语言的输入输出流转化成OC对象
12     _inputStream = (__bridge NSInputStream *)(readStream);
13     _outputStream = (__bridge NSOutputStream *)(writeStream);
14     
15     
16     // 设置代理
17     _inputStream.delegate = self;
18     _outputStream.delegate = self;
19     
20     
21     // 把输入输入流添加到主运行循环
22     // 不添加主运行循环 代理有可能不工作
23     [_inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
24     [_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
25     
26     // 打开输入输出流
27     [_inputStream open];
28     [_outputStream open];
29 }

四:登陆

 1 - (IBAction)loginBtnClick:(id)sender {
 2     
 3     // 登录
 4     // 发送用户名和密码
 5     // 在这里做的时候,只发用户名,密码就不用发送
 6     
 7     // 如果要登录,发送的数据格式为 "iam:zhangsan";
 8     // 如果要发送聊天消息,数据格式为 "msg:did you have dinner";
 9     
10     //登录的指令
11     NSString *loginStr = @"iam:zhangsan";
12     
13     //把Str转成NSData
14     NSData *data = [loginStr dataUsingEncoding:NSUTF8StringEncoding];
15     
16     
17     [_outputStream write:data.bytes maxLength:data.length];
18 }

五:读取服务器数据

 1 #pragma mark 读了服务器返回的数据
 2 -(void)readData{
 3     
 4     //建立一个缓冲区 可以放1024个字节
 5     uint8_t buf[1024];
 6     
 7     // 返回实际装的字节数
 8     NSInteger len = [_inputStream read:buf maxLength:sizeof(buf)];
 9 
10     // 把字节数组转化成字符串
11     NSData *data = [NSData dataWithBytes:buf length:len];
12     
13     // 从服务器接收到的数据
14     NSString *recStr =  [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
15     
16     NSLog(@"%@",recStr);
17     
18     [self reloadDataWithText:recStr];
19     
20 }

六:发送数据

 1 -(BOOL)textFieldShouldReturn:(UITextField *)textField{
 2     
 3     NSString *text = textField.text;
 4     
 5     NSLog(@"%@",text);
 6     // 聊天信息
 7     NSString *msgStr = [NSString stringWithFormat:@"msg:%@",text];
 8     
 9     //把Str转成NSData
10     NSData *data = [msgStr dataUsingEncoding:NSUTF8StringEncoding];
11     
12     // 刷新表格
13     [self reloadDataWithText:msgStr];
14     
15     // 发送数据
16     [_outputStream write:data.bytes maxLength:data.length];
17     
18     // 发送完数据,清空textField
19     textField.text = nil;
20     
21     return YES;
22 }

七:实现数据的显示,并且每发送一次消息都会滚动到对应的位置

 1 -(void)reloadDataWithText:(NSString *)text{
 2     [self.chatMsgs addObject:text];
 3     
 4     [self.tableView reloadData];
 5     
 6     // 数据多,应该往上滚动
 7     NSIndexPath *lastPath = [NSIndexPath indexPathForRow:self.chatMsgs.count - 1 inSection:0];
 8     [self.tableView scrollToRowAtIndexPath:lastPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
 9 }
10 
11 #pragma mark 表格的数据源
12 
13 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
14     return self.chatMsgs.count;
15 }
16 
17 
18 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
19 {
20     static NSString *ID = @"Cell";
21     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
22    
23     cell.textLabel.text = self.chatMsgs[indexPath.row];
24     
25     return cell;
26 }
27 
28 -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
29     [self.view endEditing:YES];
30 }

八:监听键盘的改变

 1     // 监听键盘
 2     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbFrmWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
 3 }
 4 
 5 
 6 -(void)kbFrmWillChange:(NSNotification *)noti{
 7     NSLog(@"%@",noti.userInfo);
 8     
 9     // 获取窗口的高度
10     
11     CGFloat windowH = [UIScreen mainScreen].bounds.size.height;
12     
13    
14     
15     // 键盘结束的Frm
16     CGRect kbEndFrm = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
17      // 获取键盘结束的y值
18     CGFloat kbEndY = kbEndFrm.origin.y;
19     
20     
21     self.inputViewConstraint.constant = windowH - kbEndY;
22 }
Socket 简介与 Java Socket 编程示例 基本概念:Socket可以被视为网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点。它是应用程序通过网络协议进行通信的接口,上联应用进程,下联网络协议栈。物理与逻辑层面:在物理层面上,Socket可能并不真实存在,它更多的是一个逻辑上的概念。但在网络编程中,Socket是不可或缺的组成部分。Socket是网络通信中的核心组件之一,它提供了应用层进程之间进行数据交换的机制。通过Socket,不同主机上的应用进程可以建立连接并传输数据。 阅读详情

相关推荐

【Java TCP/IP Socket】Socket编程大合集

为了方便各位网友学习以及方便自己复习之用,将Java TCP/IP Socket编程系列内容按照学习顺序总结如下: 【Java TCP/IP Socket】Java TCP Socket程编程 【Java TCP/IP Socket】Java UDP Socket编程 【Java TCP/IP Socket】应用程序协议中消息的成帧与解析 【Java TCP/IP Socket】构建和解析自定义协议消息 【Java TCP/IP Socket】基于线程池的TCP服务器 【Java TCP/IP

兰亭风雨的专栏 1万+

Linux内核--网络协议栈深入分析(三)--BSD socket和传输层sock

本文分析基于Linux Kernel 3.2.1 原创作品,转载请标明http://blog.youkuaiyun.com/yming0221/article/details/7979838 更多请查看专栏http://blog.youkuaiyun.com/column/details/linux-kernel-net.html 作者:闫明 Linux内核中协议族有INET协议族,UNIX协议族等,我们还是以INET...

星.云计算 331

流式Socket编程

流式Socket编程 1、实现基于流式套接字的网络功能框架,包括客户端与服务端两个部分(以类的形式); 2、在第一步的基础上,实现服务器/客户端之间的回射功能; 3、改进服务端程序,使其支持多线程,即为每个客户端请求创建一个服务线程; 客户端 // EchoTCPClientDemo.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #define WIN32_LE...

weixin_43136689的博客 1416

Spring架构篇--2.4 远程通信基础--Socket通信

远程通信基础--Socket通信

拽着尾巴的鱼儿的博客 1327

spring集成socket服务

spring框架集成socket服务,监听器检测到容器启动完成,通过线程启动socket服务

【接地系统篇】电力系统接地技术详解:从基本原理到实际应用

接地是为电流返回电源提供的一条低阻抗通道。简单来说,就是为故障电流修建一条"安全回家"的路,防止电流通过人体或其他不应带电的部件。接地系统选择原则安全性优先:TN-S系统安全性最高,适合重要场所经济性考虑:TN-C系统成本最低,适合一般工业连续性要求:IT系统供电连续性最好,适合特殊场所灵活性选择:TN-C-S系统兼顾经济与安全,应用最广。

2301_81299416的博客 2224

SpringBoot 整合 Socket 实战案例 ,实现 单点发送、广播群发,1对1,1对多

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!每天14:00更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2021超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库中间件 Sharding-JDBC 和 MyCAT 源码解析作业调度中间件 Elast...

weixin_44421461的博客 2189

kaggle竞赛平台上数据集下载详解

从kaggle 网站上下载数据集既保证了速度又避免了网络的不稳定造成下载失败问题。该平台也可以上传代码作为自己的代码库,不过本人更习惯将代码上传到github上。希望本人整理的kaggle库使用技巧能够帮助到正在阅读本博客的你。此外还有一篇博客针对kaggle数据集下载问题的几个问题的相关文章进行了整理【博客链接】。

li1784506的博客 2万+

Spring Web Socket

STOMP允许消息客户端(生产者、消费者)与任意消息代理(Broker)之间进行异步消息传输的简单文本定向消息协议。但STOMP并不是为WebSocket而设计的,它是属于消息队列的一种协议(AMQP、JMS等都属于消息队列协议)。许多消息队列都支持STOMP协议(例如:RabbitMQ、ActiveMQ)。由于它的简单性,因此可以用于定义web socket的消息体格式。

qq_72114625的博客 2039

深度学习暑期科研项目(两个月发EI论文)

对本科生而言,越早接触系统的科研训练开始上手科研项目,就越能在未来的升学求职中占据很大的优势。暑假是提升个人简历、丰富科研经历的最佳时期!哈尔滨工业大学博士师兄也会在8月1日开始带大家上手科研项目,并撰写发表EI会议论文。

Magnolia_He的博客 1443

高分系列卫星轨道、传感器参数等信息

遥感卫星数据简介-高分系列

中遥科 3309

socket/io(1)、Linux的socket编程详解

Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进 程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal) UNIX system V有:消息(mes......

黄规速博客:学如逆水行舟,不进则退 34万+

Oracle OCP 19c 认证1Z0-083考试大纲(Oracle官方版)

Oracle Database: Managing Multitenant Architecture Ed 1 course

#真题在线# 1588

Socket编程详解

Socket中文意思是“插座”,在Linux环境下,用于表示进程x间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是文件主要应用于本地持久化数据的读写,而套接字多应用于网络进程间数据的传递。在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。欲建立连接的两个进程各自有一

qq_51654808的博客 2万+

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1947

Oracle EBS AP 应付模块核心实现逻辑(极简骨架 + 分层拆解 + 业务流转 + 分录 + 核心表)

Oracle EBS AP应付模块采用四层逻辑架构:1)主数据层统一管控供应商基础信息;2)发票负债层通过三单匹配校验生成应付账款;3)付款核销层实现负债冲减;4)SLA层自动生成财务凭证。核心流程包括发票验证(匹配PO/收货单)、付款核销(全额/部分冲账)、会计分录自动生成(通过SLA引擎)。模块严格遵循"无匹配不负债、无验证不入账"原则,与采购、库存等模块深度集成,实现从供应商创建到付款核销的完整业务闭环,确保应付账款准确性和审计追溯能力。

金牌架构师 440

Raw Socket和Socket编程

 1.原始套接字(raw socket)  1.1 原始套接字工作原理与规则         原始套接字是一个特殊的套接字类型,它的创建方式跟TCP/UDP创建方法几乎是一摸一样,例如,通过CODE:[Copy to clipboard]       int sockfd;       sockfd = socktet(AF_INET, SOCK_RAW, IPPROTO_

KZM2008的专栏 3万+

APP签名验证全栈破解:Frida Hook绕过+算法逆向+Python一键调用(附可运行脚本)

做过APP逆向和爬虫的同学,肯定都被签名验证折磨过:改了一行代码重新打包,APP直接闪退;抓包看到接口有个sign参数,翻遍JS找不到加密逻辑;好不容易找到加密函数,一调用就崩溃。客户端APK签名校验服务端接口签名验证。前者防止你篡改APP,后者防止你伪造请求。很多人卡在第一步,改完APK就闪退,根本没机会碰接口。本文基于真实项目实战,分享一套通用的签名验证破解方案。从客户端APK签名校验的Frida Hook绕过,到服务端sign算法的逆向还原,最后用Python实现一键调用。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 964

socket编程

socket编程——一个简单的例子转载 2016年10月16日 00:29:26标签:socket网络编程13475转载自:网络中进程之间如何通信什么是Socketsocket一词的起源socket的基本操作31socket函数32bind函数网络字节序与主机字节序33listenconnect函数34accept函数35readwrite等函数36close函数socket中TCP的三次握手建立...

hql946233586的博客 1852

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java的Socket编程

  java.net包中提供了UDP和TCP这两种常见的网络协议的支持。 Socket编程   套接字使用TCP提供了两台计算机之间的通信机制。客户端程序创建一个套接字,并尝试连接服务器的套接字。当连接建立时,服务器会创建一个Socket对象。客户端和服务器现在可以通过对Socket对象的写入和读取来进行通信。   java.net.Socket类代表一个套接字,并且java.net.ServerSocket类为服务器程序提供了一种来监听客户端,并与它们建立连接的机制。   以下步骤在两台计算机之间使用套接

健身房 3895

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++ socket编程

概要: sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。 服务器端编程的步骤: 1:加载套接字库,创建套接字(WSAStartup()/socket()); 2:绑定套接字到一个IP地址和一个端口上(bind()); 3:将套接...

残花织梦的博客 8872

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

golang socket编程

在大学的时候,曾经修过一门课《网络原理》,其中就花很大的篇幅讲过TCP/IP四层网络协议(OSI的七层网络协议可以映射到这个四层协议上来),也讲过HTTP协议、socket编程。但是讲的东西多了,总有一种云里雾里的感觉,而且也没能很好的了解其中的关联。这里就和大家一起梳理一下,上述几个概念之间的关系,并通过golang实现socket编程。 1. 基础概念 1.1 TCP/IP协议 TCP/...

卓立的博客 6557

【Linux】SOCKET编程

传统的进程间通信借助内核提供IPC机制进行,但是只能限制于本机通信,若要进行跨机通信,就要使用网络通信。​ 网络通信的本质是借助内核提供SOCKET伪文件的机制进行通信,实际上是使用了文件描述符,因此需要使用内核提供的socketAPI函数库(在传输层层面进行)。

Demok123的博客 3199

什么是SOCKET编程?在PHP中如何实现SOCKET通信?

SOCKET编程是一种网络编程方式,它允许程序通过网络(如Internet)或本地机器(如Unix域套接字)进行通信。SOCKET可以看作是网络通信的一个端点,通过它,程序可以发送和接收数据。SOCKET编程提供了低级的网络通信接口,使得程序员可以直接控制网络数据流。SOCKET编程是一种基础但强大的网络编程技术,它允许程序通过网络进行直接通信。在PHP中,可以使用内置的socket_*函数来实现SOCKET编程,创建服务器端和客户端进行通信。

长风破浪会有时的博客 1632

Socket编程指南及示例程序

1         前言在一些常用的编程技术中,Socket网络编程可以说是最简单的一种。而且Socket编程需要的基础知识很少,适合初学者学习网络编程。目前支持网络传输的技术、语言和工具繁多,但是大部分都是基于Socket开发的,虽说这些“高级”的网络技术屏蔽了大部分底层实现,号称能极大程度的简化开发,而事实上如果你没有一点Socket基础,要理解和应用这些技术还是很困难的,而且会让你成为“

sdhfll的专栏 3176
上一篇: SDWebImage
下一篇: ios多线程
SpringJustin
博客等级 码龄11年 2粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值