send函数用于在一个已经连接成功的socket上发送数据:
int send(
__in SOCKET s, //已连接的套接字
__in const char *buf,//指向将要发送数据的缓冲区
__in int len, //缓冲区数据的字节长度
__in int flags //指定数据传输方式:0---无特殊行为;MSG_DONTROUTE---传输层不要将它发出的包
//路由出去;MSG_OOB---数据应该被带外发送
);
其中,所谓带外数据,也可称为TCP紧急数据,它是在两个相连的每一对套接字间逻辑上独立的传输通道。带外数据是独立于普通数据传送给用户的。
返回值:
成功时,返回发送的字节数;
失败时,返回SOCKET_ERROR,调用WSAGetLastError函数查看进一步错误信息。
send函数实例如下:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT 27015
int main() {
//----------------------
// Declare and initialize variables.
int iResult;
WSADATA wsaData;
SOCKET ConnectSocket;
struct sockaddr_in clientService;
int recvbuflen = DEFAULT_BUFLEN;
char *sendbuf = "Client: sending data test";
char recvbuf[DEFAULT_BUFLEN] = "";
//----------------------
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR) {
printf("WSAStartup failed with error: %d/n", iResult);
return 1;
}
//----------------------
// Create a SOCKET for connecting to server
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
printf("socket failed with error: %ld/n", WSAGetLastError());
WSACleanup();
return 1;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( DEFAULT_PORT );
//----------------------
// Connect to server.
iResult = connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) );
if (iResult == SOCKET_ERROR) {
printf( "connect failed with error: %d/n", WSAGetLastError() );
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
//----------------------
// Send an initial buffer
iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
if (iResult == SOCKET_ERROR) {
printf("send() failed with error: %d/n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
printf("Bytes Sent: %d/n", iResult);
// shutdown the connection since no more data will be sent
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed with error: %d/n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
// Receive until the peer closes the connection
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if ( iResult > 0 )
printf("Bytes received: %d/n", iResult);
else if ( iResult == 0 )
printf("Connection closed/n");
else
printf("recv failed with error: %d/n", WSAGetLastError());
} while( iResult > 0 );
// cleanup
closesocket(ConnectSocket);
WSACleanup();
return 0;
}
revc函数用于从一个已经建立连接的socket出接收数据:
int recv(
__in SOCKET s, //准备接收数据的套接字
__out char *buf, //指向即将接收数据的字符缓冲区的指针
__in int len, //缓冲区的大小
__in int flags //指定传输控制方式:0---无特殊行为;MSG_PKKE---表示数据从接收端口复制到接收
//缓冲区中,并且没有从系统缓冲区中将数据删除;MSG_OOB---表示数据是带外发送的
);
返回值:
成功时,返回接收的字节数;
失败时,返回SOCKET_ERROR,调用WSAGetLastError函数查看进一步错误信息。
recv函数实例代码如下:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
int __cdecl main() {
//----------------------
// Declare and initialize variables.
WSADATA wsaData;
int iResult;
SOCKET ConnectSocket;
struct sockaddr_in clientService;
char *sendbuf = "this is a test";
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
//----------------------
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR) {
printf("WSAStartup failed: %d/n", iResult);
return 1;
}
//----------------------
// Create a SOCKET for connecting to server
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld/n", WSAGetLastError() );
WSACleanup();
return 1;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( 27015 );
//----------------------
// Connect to server.
iResult = connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) );
if ( iResult == SOCKET_ERROR) {
closesocket (ConnectSocket);
printf("Unable to connect to server: %ld/n", WSAGetLastError());
WSACleanup();
return 1;
}
// Send an initial buffer
iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
if (iResult == SOCKET_ERROR) {
printf("send failed: %d/n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
printf("Bytes Sent: %ld/n", iResult);
// shutdown the connection since no more data will be sent
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed: %d/n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
return 1;
}
// Receive until the peer closes the connection
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if ( iResult > 0 )
printf("Bytes received: %d/n", iResult);
else if ( iResult == 0 )
printf("Connection closed/n");
else
printf("recv failed: %d/n", WSAGetLastError());
} while( iResult > 0 );
// cleanup
closesocket(ConnectSocket);
WSACleanup();
return 0;
}
分享到:
相关推荐
send recv nit linux 下recv send
iterm2-recv-zmodem.sh
基于ES32_SDK\Projects\ES32F36xx\Examples_ALD\UART\编写的send_recv_by_dma_fast_random_length例程,用户可以用该例程实现uart不定长的数据接收。
Socket下send和recv使用的说明及介绍
python数据分析与可视化-02-socket之send和recv的原理剖析.ev4.rar
服务器远程sz 下载文件时经常会遇到这样的错误, *\*B0100000023be50; 这里是两个配置iterm2的脚本,解决上述问题
send 和recv 详解,绝对好东西。
yog2-plugin-recv-reload ======================== 通过yog2-plugin-recv-reload,可以实现在使用YOG2框架进行开发工作时,上传APP代码无需重启服务就可以调试最新代码 系统要求 yog2-kernel >= 0.2.2 Usage 安装...
对于recvfrom ,可同时应用于面向连接的和无连接的套接字。recv一般只用在面向连接的套接字,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。 如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套...
hook send recv wsasend wsarecv 封包工具源码 本工具支持命令行操作,采用远程线程注入目标进程,注入后hook发包函数,实现封包拦截。 主程序为MFC编写 动态链接库VC WIN32项目
github上的地址已经404了,直接在这下载就可以放到本地的目录: cd /usr/local/bin 下就可以
01-简介_recv 02-ER模型、三范式_recv 03-完整性_recv 04-图形界面操作_recv 05-逻辑删除_recv 06-创建表_recv 07-增加_recv 08-修改、删除_recv 09-备份与恢复_recv 10-总结_recv 2.MySQL查询 01-复习 02-查询-比较...
不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。
使用微软detours库编写的API拦截函数,本代码主要提供了拦截recv函数的例子,其他函数的拦截可以参考例子编写
这是套接字接收程序,还有一个发送程序tcp-send.c,学习linux可以下载看一下,对理解套接字很有用
udp 测试程序 udp 测试程序 udp 测试程序 udp 测试程序
netcat0.7.1安装部署文档.。
01-复习_recv 02-简介_recv 03-增、改、删_recv 04-查询_recv 05-查询2_recv 06-查询3_recv 07-聚合-分组_recv 08-聚合-筛选、排序、分页_recv 09-聚合-拆分数组_recv 资料 02.MongoDB高级 视频 01-复习 02-索引 │...
里面有socket函数和recv函数的详细讲解,有用