INTERNET编程之SOCKET编程补充
来源:互联网 发布:网络宣传渠道 编辑:程序博客网 时间:2024/05/16 10:34
上次写INTERNET编程的时候,忘记了说如何设置SOCKET选项.今天特地补回来.
我们就试着设置SOCKET接收数据的超时值.
好,那来看代码吧:
#include <stdio.h>
#include "winsock2.h"
void main()
{
/*-------------------------------------------*/
初始化套接字库
/*-------------------------------------------*/
WORD wVersionRequested; //版本号
WSADATA wsaData;
int ret;
wVersionRequested = MAKEWORD( 2, 2 ); //2.2版本的套接字
ret = WSAStartup( wVersionRequested, &wsaData );
if ( ret != 0 )
{
printf("加载套接字库失败!/n");
return ;
}
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
{
printf("加载套接字库失败!/n");
WSACleanup();
return ;
}
/*-------------------------------------------*/
创建客户端
/*-------------------------------------------*/
hostent * pHost = NULL; //指向服务器主机的指针
SOCKET socket_client;
SOCKADDR_IN server; //服务器地址信息
pHost = gethostbyname( "127.0.0.1" );
if ( !pHost )
{
printf("无法解析服务器地址!错误原因:%d/n", WSAGetLastError() );
WSACleanup();
return ;
}
server.sin_addr.S_un.S_addr = *((DWORD*)pHost->h_addr_list[0]);
server.sin_family = AF_INET;
server.sin_port = htons(4443);
memset( server.sin_zero, 0, sizeof(server.sin_zero) );
socket_client = socket( AF_INET, SOCK_STREAM, 0 ); //创建套接字(socket)
if ( socket_client == INVALID_SOCKET )
{
printf("创建套接字失败!错误原因:%d/n", WSAGetLastError() );
WSACleanup();
return ;
}
if( SOCKET_ERROR == connect( socket_client , (SOCKADDR*)&server ,sizeof(SOCKADDR) ) )
{
printf( "连接服务器失败!错误原因:%d/n", WSAGetLastError() );
closesocket( socket_client );
WSACleanup();
return ;
}
//MS SOCKET 2以上版本才支持
int TimeOut = 3000;
if ( setsockopt( socket_client, SOL_SOCKET, SO_RCVTIMEO, (char*)&TimeOut, sizeof(TimeOut) ) != SOCKET_ERROR )
{
printf( "Set SO_RCVTIMEO: ON/n" );
}
/*if ( setsockopt( socket_client, SOL_SOCKET, SO_SNDTIMEO, (char*)&TimeOut, sizeof(TimeOut) ) != SOCKET_ERROR )
{
printf( "Set SO_SNDTIMEO: ON/n" );
}*/
do
{
char buffer[1024] = {0};
if( SOCKET_ERROR == recv( socket_client, buffer, 1023, 0 ) )
{
printf( "Error Occurs In recv : %d/n",WSAGetLastError() );
closesocket( socket_client );
return ;
}
printf( "recv : %s/n", buffer );
if ( strcmp(strupr(buffer),"QUIT") == 0 )
{
break;
}
printf( "Send:" );
scanf( "%s", buffer );
if( SOCKET_ERROR == send( socket_client, buffer, strlen(buffer) + 1, 0 ) )
{
printf( "发送数据失败!错误原因 : %d/n",WSAGetLastError() );
closesocket( socket_client );
WSACleanup();
return ;
}
if ( strcmp(strupr(buffer),"QUIT") == 0 )
{
break;
}
} while( TRUE );
printf("断开与服务器的连接!/n");
closesocket( socket_client );
WSACleanup();
}
- INTERNET编程之SOCKET编程补充
- INTERNET编程之SOCKET编程
- INTERNET编程之CSOCKET编程
- INTERNET编程之INTERNET简单使用HTTP
- INTERNET编程之CSOCKET编程续
- Android编程之SQLite补充
- 网络编程之Socket编程
- 网络编程-基于UDP的Socket网络编程(补充)
- Linux编程之socket
- Socket编程之Select
- PHP之Socket编程
- SOCKET编程之 INADDR_ANY
- SOCKET编程之INADDR_ANY
- 网络编程之Socket
- C#之Socket编程
- LWIP之SOCKET编程
- socket编程之select()
- socket编程之select()
- 常见windows图标与注册表的对应关系一览
- PHP性能优化(2)-产生瓶颈的原因
- tcl/tk参考——列表操作lreplace
- Facade 模式
- SSO 解决方案
- INTERNET编程之SOCKET编程补充
- Infragistics NetAdvantage 2007 For .NET破解版下载
- linux基础
- Infragistics.NetAdvantage.2008.Suite.Vol1 SN
- session的详细解释
- Web开发设计:DisplayTag应用指南
- Display Tag使用
- 西方:中国国产大型客机10年内飞不上天
- displaytag的使用方法(用于数据表格的显示和功能控制)