急需c的socket,windows平台!!!

shoumingli1224 2004-08-30 05:08:58
我有c++ 的windows socket源程序,现在急需c版的socket代码,必须是windows版的。急啊!!大家救救我吧!!!
...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lion1900 2004-09-16
  • 打赏
  • 举报
回复
#include <winsock2.h>
#pragma comment("ws2_32", lib)


win95需要打补丁,win98及以上版本自带
angelface 2004-09-16
  • 打赏
  • 举报
回复
怎么搞定的, 说一下啊, 我也想知道
goodluckyxl 2004-09-16
  • 打赏
  • 举报
回复
客户 #include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>

#define DEFAULT_COUNT 20
#define DEFAULT_PORT 5150
#define DEFAULT_BUFFER 2048
#define DEFAULT_MESSAGE "This is a test of emergency broadcasting system"

char g_szServer[128] = {0}; //server to connect to
char g_Message[2048] = {0}; //message sending to server
int gi_Port = DEFAULT_PORT; //Port on server to connect to
DWORD gdw_Count = DEFAULT_COUNT; //Number of times to send message
BOOL gb_SendOnly = FALSE; //Send data only: don't receive

void usage()
{
printf("usage: client [-p:x] [-s:IP] [-n:x] [-o] \n\n");
printf(" -p:x Romote port to send to \n");
printf(" -s:IP Server's IP address or host name\n");
printf(" -n:x Number of times to send message \n");
printf(" -o Send message only \n");
ExitProcess( 1 );

}

void ValidateArgs( int argc, char **argv )
{
int i = 0;

for( i = 0; i < argc; i++ )
{
if( (argv[i][0] == '-') || ( argv[i][0] == '/' ) )
{
switch( tolower(argv[i][1]) )
{
case 'p': //remote port
if( strlen(argv[i]) > 3 )
gi_Port = atoi( &argv[i][3] );
break;
case 's': // server
if( strlen(argv[i]) > 3 )
strcpy( g_szServer, &argv[i][3] );
break;
case 'n':
if( strlen(argv[i]) > 3 )
gdw_Count = atol( &argv[i][3] );
break;
case 'o':
gb_SendOnly = TRUE;
break;
default:
usage();
break;
}


}
}
}

int main( int argc, char **argv )
{
WSADATA wsd;
SOCKET sClient;
char szBuffer[DEFAULT_BUFFER] = {0};
int ret, i ;
struct sockaddr_in server = {0};
struct hostent *host = NULL;
char *p =NULL;
short TermError = 0;
int RepLength = 0;

ValidateArgs( argc, argv );

/* 模拟抱文信息 */
int ReportLength = 20;
unsigned short ZoneCode = 0x91;
int Address = 10026;
char RepCon[11] = {"1234567890"};
char GetMsg[100] = {0};

short flag = 0;
unsigned short zonecode = 0;
int address = 0;
short ErrorCode = 0;

/*模拟抱文信息 */
//初始化 winsock
if( WSAStartup( MAKEWORD(2,2), &wsd ) != 0 )
{
printf("Failed to load winsocket \n");
return 1;
}
memcpy( g_Message, &ReportLength, 4 );
memcpy( g_Message + 4, &Address, 4 );
memcpy( g_Message+8, &ZoneCode, 2 );
memcpy( g_Message + 10, RepCon, 10 );

sClient = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( sClient == INVALID_SOCKET )
{
printf(" CreateSocket() failed %d\n", WSAGetLastError() );
return 1 ;
}

server.sin_family = AF_INET;
server.sin_port = htons(gi_Port);
server.sin_addr.s_addr = inet_addr( "10.10.10.166" );

if( server.sin_addr.s_addr == INADDR_ANY )
{
host = gethostbyname(p);
if( host == NULL )
{
printf(" unable to resolve server %s\n", g_szServer );
return 1 ;
}
CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length );
}

//建立连接
if( connect( sClient, (struct sockaddr*)&server, sizeof(server) ) == SOCKET_ERROR )
{
printf(" connect() failed %d\n", WSAGetLastError() );
return 1 ;
}

//send
for( i = 0; i < gdw_Count; i++ )
{
ret = send( sClient, g_Message, ReportLength, 0 );
if( ret == 0 )
break;
else if( ret == SOCKET_ERROR )
{
printf(" send() failed %d\n", WSAGetLastError() );
return 1 ;
}

printf("send bytes %d\n", ret );

if( !gb_SendOnly )
{
ret = recv( sClient, szBuffer,DEFAULT_BUFFER, 0 );
if( ret == 0 )
break;
else if( ret == SOCKET_ERROR )
{
printf(" recv() failed %d\n", WSAGetLastError() );
return 1 ;
}

memcpy( &RepLength, szBuffer, 4 );
memcpy( &flag, szBuffer+4, 2 );
memcpy( &address, szBuffer+6, 4 );
memcpy( &ErrorCode, szBuffer+10, RepLength-10 );

szBuffer[ret] = '\0';
sprintf( GetMsg, "%d%s%d%s%d%s%d%", RepLength," ", flag," ", address," ", ErrorCode );
printf(" recv[%d] %s\n", ret, GetMsg );

}
}
closesocket( sClient );
WSACleanup();

return 0;
}
goodluckyxl 2004-09-16
  • 打赏
  • 举报
回复
include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>


#define DEFAULT_PORT 5150
#define DEFAULT_BUFFER 4096


int gi_Port = DEFAULT_PORT;
BOOL gb_InterFace = FALSE;
BOOL gb_RecvOnly = FALSE;
char szAddress[128] = {0};

void usage()
{
printf("usage: server [-p:x] [-i:IP] [-o] \n\n");
printf(" -p:x port number to listen on \n");
printf(" -i:str interface to listen on \n");
printf(" -o don't echo the data back \n");
ExitProcess( 1 );

}

/*
* Function: ValidateArgs
* Descriptions:phrase the commad line arguements
* and set some globle flags
*/
void ValidateArgs( int argc, char **argv )
{
int i = 0;

for( i = 0; i < argc; i++ )
{
if( (argv[i][0] == '-') || ( argv[i][0] == '/' ) )
{
switch( tolower(argv[i][1]) )
{
case 'p':
gi_Port = atoi( &argv[i][3] );
break;
case 'i':
gb_InterFace = TRUE;
if( strlen(argv[i]) > 3 )
strcpy( szAddress, &argv[i][3] );
break;
case 'o':
gb_RecvOnly = TRUE;
break;
default:
usage();
break;
}


}
}
}


DWORD WINAPI ClientThread( LPVOID lpParam )
{
SOCKET sock = (SOCKET)lpParam;
char szBuffer[DEFAULT_BUFFER] = {0};
int ret, nLeft, idx;

while(1)
{
ret = recv( sock, szBuffer, DEFAULT_BUFFER, 0 );
if( ret == 0 )
break;
else if( ret == SOCKET_ERROR )
{
printf(" Recv() failed %d\n", WSAGetLastError() );
break;
}

szBuffer[ret] = '\0';
printf(" Recv buffer is %s\n", szBuffer );

if( !gb_RecvOnly )
{
nLeft = ret;
idx = 0;

//循环直到接受的内容全部send
while( nLeft >0 )
{
ret = send( sock, szBuffer+idx, nLeft, 0 );
if( ret == 0 )
break;
else if( ret == SOCKET_ERROR )
{
printf(" Send() failed %d\n", WSAGetLastError() );
break;
}

idx += ret;
nLeft -= idx;
}

}
}

return 0;
}

int main( int argc, char **argv )
{
WSADATA wsd;
SOCKET sListen,
sClient;
int iAddrSize;
HANDLE hThread;
DWORD dwThreadId;
struct sockaddr_in local,
client;

ValidateArgs( argc, argv );
//初始化 winsock
if( WSAStartup( MAKEWORD(2,2), &wsd ) != 0 )
{
printf("Failed to load winsocket \n");
return 1;
}

//创建一个监听socket
sListen = socket( AF_INET, SOCK_STREAM, IPPROTO_IP );

if( sListen == SOCKET_ERROR )
{
printf(" CreateSocket() failed %d\n", WSAGetLastError() );
return 1 ;
}

//设置local地址内容
if( gb_InterFace )
{
local.sin_addr.s_addr = inet_addr( szAddress );
if( local.sin_addr.s_addr = INADDR_NONE )
usage();
}
else
local.sin_addr.s_addr = htonl( INADDR_ANY );

local.sin_family = AF_INET;
local.sin_port = htons( gi_Port );

//捆绑
if( bind( sListen, ( struct sockaddr*)&local, sizeof(local) ) == SOCKET_ERROR )
{
printf(" bind failed %d\n", WSAGetLastError() );
return 1;
}

//监听
listen( sListen, 8 );

while(1)
{

iAddrSize = sizeof( client );
sClient = accept( sListen, (struct sockaddr*)&client, &iAddrSize );


if( sClient == INVALID_SOCKET )
{
printf(" accept failed %d\n", WSAGetLastError() );
break;
}

printf(" accept client: %s %d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port) );

//创建线程处理客户端内容
hThread = CreateThread( NULL, 0, ClientThread, (LPVOID)sClient, 0, &dwThreadId );
if( hThread == NULL )
{
printf(" Thread Create failed %d\n", WSAGetLastError() );
break;
}
CloseHandle( hThread );

}

closesocket( sListen );
WSACleanup();

return 0;
}
shoumingli1224 2004-08-30
  • 打赏
  • 举报
回复
搞定了。over!!
lovessm 2004-08-30
  • 打赏
  • 举报
回复
听不懂,UP。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧