socket中的send和recv怎么用? 本人新手,想通过socket开发访问网页,并得到那个网页反馈的信息,调研之后发现可以使用send和recv。请问socket中的send和recv怎么用? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MSDN中就有例子,给你贴上。#include <stdio.h>#include "winsock2.h"void main() { //---------------------- // Initialize Winsock WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != NO_ERROR) printf("Error at WSAStartup()\n"); //---------------------- // Create a SOCKET for connecting to server SOCKET ConnectSocket; ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ConnectSocket == INVALID_SOCKET) { printf("Error at socket(): %ld\n", WSAGetLastError()); WSACleanup(); return; } //---------------------- // The sockaddr_in structure specifies the address family, // IP address, and port of the server to be connected to. sockaddr_in clientService; clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" ); clientService.sin_port = htons( 27015 ); //---------------------- // Connect to server. if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) { printf( "Failed to connect.\n" ); WSACleanup(); return; } //---------------------- // Declare and initialize variables. int bytesSent; int bytesRecv = SOCKET_ERROR; char sendbuf[32] = "Client: Sending data."; char recvbuf[32] = ""; //---------------------- // Send and receive data. bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 ); printf( "Bytes Sent: %ld\n", bytesSent ); while( bytesRecv == SOCKET_ERROR ) { bytesRecv = recv( ConnectSocket, recvbuf, 32, 0 ); if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) { printf( "Connection Closed.\n"); break; } printf( "Bytes Recv: %ld\n", bytesRecv ); } WSACleanup(); return;} 多看看别人是怎么用的吧也就是一个流程的问题如果是服务器就要建立、绑定、侦听、连接然后通过send 和 recv 来发送和接收消息。不知你是用什么来实现,如果是MFC 则recv函数的意思是只要系统缓冲区中有数据存在,程序就会自动的调用recv函数来进行接收处理。 我是用MFC开发,通过访问一个网址,然后得到这个网址反馈回来的信息。然后再解析这些信息,从而使用。 我这里是客户端。我刚才试验了一下,已知www.google.com.cn的IP地址是:203.208.37.99当我这么写代码:clientService.sin_addr.s_addr = inet_addr( "203.208.37.99" );可以通过那个connect函数的判断链接。但当我这么些代码: clientService.sin_addr.s_addr = inet_addr( "http://www.google.com.cn" );则通不过那个connect函数的判断链接。请问这是怎么回事? 使用WinInet类,用GetHttpConnection与服务器进行连接 "http://www.google.com.cn"不是地址,用gethostbyname("www.google.com.cn")可以得到地址。 先谢。用gethostbyname("www.google.com.cn")可以得到地址。但是得到网址之后,怎么拿来放在clientService.sin_addr.s_addr = inet_addr( "203.208.37.99" );中使用?发现inet_addr使用类型是const char *而gethostbyname("www.google.com.cn")得到的地址是hostent *类型。 hostent结构中的h_addr_list是一个地址列表,一般情况取h_addr_list[0]来用就行了。自己编程调试一下,看看结构中的数据就明白了。 求助!基类不是CTReeView怎么使用CTreeCtrl呢? 一台机子多个客户端 如何在线使第三方网页运行本地脚本?? MFC图像小问题,请教! Xtreme ToolKit怎么用呀 是不是不能在动态连接库中用ADO操纵数据库? 请问历史曲线如何画?有什么控件吗?提了意见的都有分! 屏保程序 通过mouse_event模拟鼠标,但是一卡一卡的,如何更顺畅呢? 进程问题,请问各位大虾 CHtmlView问题过来看看吧? 在ATL做的Activex中,如何使用定时器?
#include <stdio.h>
#include "winsock2.h"void main() {
//----------------------
// Initialize Winsock
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n"); //----------------------
// Create a SOCKET for connecting to server
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
} //----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( 27015 ); //----------------------
// Connect to server.
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return;
} //----------------------
// Declare and initialize variables.
int bytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf[32] = "Client: Sending data.";
char recvbuf[32] = ""; //----------------------
// Send and receive data.
bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent ); while( bytesRecv == SOCKET_ERROR ) {
bytesRecv = recv( ConnectSocket, recvbuf, 32, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
printf( "Connection Closed.\n");
break;
}
printf( "Bytes Recv: %ld\n", bytesRecv );
} WSACleanup();
return;
}
也就是一个流程的问题
如果是服务器就要建立、绑定、侦听、连接
然后通过send 和 recv 来发送和接收消息。
不知你是用什么来实现,如果是MFC 则recv函数的意思是只要系统缓冲区中有数据存在,程序就会自动的调用recv函数来进行接收处理。