标签:socket
协议 | 端口 | 说明 |
---|---|---|
HTTP | 80 | 超文本传输协议 |
HTTPS | 443 | HTTP+SSL,HTTP的安全版 |
FTP | 20,21,990 | 文件传输 |
POP3 | 110 | 邮件协议 |
SMTP | 25 | 简单邮件传输协议 |
telnet | 23 | 远程终端协议 |
#import <sys/socket.h>
#import <netinet/in.h>
#import <arpa/inet.h>
函数说明
1.scoket函数
int clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
2.connect函数
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(12345);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int connResult = connect(clientSocket, (const struct sockaddr *)&serverAddr, sizeof(serverAddr));
3.send函数
NSString *sendMsg = @"Hello";
ssize_t sendLen = send(clientSocket, sendMsg.UTF8String, strlen(sendMsg.UTF8String), 0);
同步Socket的send函数的执行流程如下:
调用该函数时,send先比较待发送数据的长度len与套接字s的发送缓冲区的长度(区别于buf),如果len大于s的发送缓冲区的长度,则函数返回SOCKET_ERROR;如果len小于或者等于s发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲区中的数据:
如果send函数copy数据成功,就返回实际copy的字节数,如果send在copy数据时出现错误,那么send就返回SOCKET_ERROR;如果send在等待协议传送数据时断开网络,那么send函数也返回SOCKET_ERROR。
要注意send函数把buf中的数据成功copy到s的发送缓冲的剩余空间后就返回了,但是此时这些数据并不一定马上被传到连接的另一端。如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR.(每一个除send之外的Socket函数在执行的最开始总要先等待套接字的发送缓冲区中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回SOCKET_ERROR)。
4.recv函数
uint8_t buffer[1024]; // 要把空间准备出来
ssize_t recvLen = recv(clientSocket, buffer, sizeof(buffer), 0);
同步Socket的recv函数的执行流程如下:
调用recv函数时,recv先等待s的发送缓冲区中的数据被协议发送完毕:
5.close函数
close(clientSocket);
相关名词解释:
- 长连接:连上就一直聊!通常用于 QQ,即时通讯,效率高!
- 短连接:通讯一次,马上断开,下一次再次建立连接,效率低!
Socket开发——Netcat
$ nc -lk 12345
Netcat:是终端下用于调试和检查网络的工具包,可用于创建 TCP/IP 连接。
标签:socket
原文地址:http://blog.csdn.net/chenyblog/article/details/44310263