c语言实现socket编程,C语言实现Socket编程

tcpsrv.c的内容如下:

#include

#include

#define RECEIVE_MAX_LENGTH 100

#define SEND_MAX_LENGTH 100

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 )

{

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1

|| HIBYTE( wsaData.wVersion ) != 1 )

{

WSACleanup( );

return;

}

SOCKET socksrv = socket(AF_INET,SOCK_STREAM,0);//监听的套接字

SOCKADDR_IN socketadd;

socketadd.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

socketadd.sin_family = AF_INET;

socketadd.sin_port = htons(7001);

if( SOCKET_ERROR == bind(socksrv,(SOCKADDR*)&socketadd,sizeof(SOCKADDR)) )

{

printf("bind err\n");

return;

}

if( SOCKET_ERROR == listen(socksrv,5) )

{

printf("listen err");

return;

}

SOCKADDR_IN sockclient;

int len = sizeof(SOCKADDR);

while(1)

{

SOCKET sockconn = accept(socksrv,(SOCKADDR*)&sockclient,&len);//建立连接的套节字

if(INVALID_SOCKET == sockconn )

{

printf("acc err\n");

return;

}

char sendData[SEND_MAX_LENGTH];

//scanf("%s",sendData);

//strcpy(sendData, "hello client, i\'m server");

sprintf(sendData,"%s","hello client, i\'m server");

if( SOCKET_ERROR == send(sockconn,sendData,strlen(sendData)+1,0) )

{

printf("send err\n");

return;

}

char getData[RECEIVE_MAX_LENGTH];

recv(sockconn,getData,RECEIVE_MAX_LENGTH,0);

printf("%s\n",getData);

closesocket(sockconn);

}

}

tcpclient.c 的内容如下:

#include

#include

#define RECEIVE_MAX_LENGTH 100

#define SEND_MAX_LENGTH 100

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 )

{

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1

|| HIBYTE( wsaData.wVersion ) != 1 )

{

WSACleanup( );

return;

}

SOCKET socketClient = socket(AF_INET,SOCK_STREAM

最新版Socket编程,后面带有程序实例,并通过调试,可以直接编译运行;希望对大家有帮助。代码设计服务端、客户端socket实例,设计IPV4、IPV6的实例代码。 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 部分代码(服务器): #include #include #include #include #include #include #include #include #define SERVPORT 3333 /*服务器监听端口号 */ #define BACKLOG 10 /* 最大同时连接请求数 */ main() { int sockfd,client_fd; /*sockfd:监听socket;client_fd:数据传输socket */ struct sockaddr_in my_addr; /* 本机地址信息 */ struct sockaddr_in remote_addr; /* 客户端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror( "socket创建出错!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero( &(my_addr.sin_zero),8); if (bind(sockfd, (struct sockaddr *) &my;_addr, sizeof(struct sockaddr)) == -1) { perror( "bind出错!"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror( "listen出错!"); exit(1); } while(1) { sin_size = sizeof(struct sockaddr_in); if ((client_fd = accept(sockfd, (struct sockaddr *) &remote;_addr, &sin;_size)) == -1) { perror( "accept出错"); continue; } printf( "received a connection from %s\n", inet_ntoa(remote_addr.sin_addr)); if (!fork()) { /* 子进程代码段 */ if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1) perror( "send出错!"); close(client_fd); exit(0); } close(client_fd); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值