windows-sock-简单例子-转

Windows下的简单tcp例子。

代码均在VC6.0下调试过。

服务器代码:

//TCP server

//listen port 9102

//receive string and display it


//Visual C++ 6.0


#include <stdio.h>

#include <winsock2.h>


#pragma comment(lib,"ws2_32.lib")



#define BUFLEN 1024


int main()

{

SOCKET serversoc;

SOCKET clientsoc;

SOCKADDR_IN serveraddr;

SOCKADDR_IN clientaddr;

char buf[BUFLEN];

int len;


    WSADATA wsa;

WSAStartup(MAKEWORD(1,1),&wsa);//initial Ws2_32.dll by a process

if((serversoc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0)//create a tcp socket

{

printf("Create socket fail!\n");

return -1;

}

serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(9102);

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


if(bind(serversoc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0)

{

printf("Bind fail!\n");

return -1;

}

//start listen, maximum length of the queue of pending connections is 1

printf("Start listen...\n");

if(listen(serversoc, 1) != 0)

{

printf("Listen fail!\n");

return -1;

}


len = sizeof(SOCKADDR_IN);


//waiting for connecting

if((clientsoc = accept(serversoc, (SOCKADDR *)&clientaddr, &len))<=0)

{

printf("Accept fail!\n");

return -1;

}

printf("Connected\n");

while(1)

{

//waiting for data receive

if(recv(clientsoc, buf, BUFLEN, 0) <= 0)

{

//some error occur

printf("Close connection\n");

closesocket(clientsoc);

break;

}

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

}

WSACleanup(); //clean up Ws2_32.dll 

return 0;

}

客户端代码:

//TCP client

//client send string to server


//Visual C++ 6.0


#include <stdio.h>

#include <winsock2.h>


#pragma comment(lib,"ws2_32.lib")



int main()

{

SOCKET soc;

SOCKADDR_IN serveraddr;

SOCKADDR_IN clientaddr;

unsigned char buf[1024];


    WSADATA wsa;

WSAStartup(MAKEWORD(1,1),&wsa);//initial Ws2_32.dll by a process


if((soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0)//create a tcp socket

{

printf("Create socket fail!\n");

return -1;

}


serveraddr.sin_family = AF_INET;

serveraddr.sin_port = htons(9102);

serveraddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");


//connect to server

printf("Try to connect...\n");

if(connect(soc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0)

{

printf("Connect fail!\n");

return -1;

}

printf("Connected\n");

while(1)

{

scanf("%s", buf);

//send to server

if(send(soc, buf, strlen(buf)+1, 0)<=0)

{

printf("Error!\n");

}

}


WSACleanup(); //clean up Ws2_32.dll 

return 0;

}


/*****************************************udp*********************************************************/

服务器端代码:

//UDP server

//listen port 9102

//receive string and display it


//Visual C++ 6.0


#include <stdio.h>

#include <winsock2.h>


#pragma comment(lib,"ws2_32.lib")


#define BUFLEN 1024


int main(void)

{

SOCKET soc;

SOCKADDR_IN addr;

char buf[BUFLEN];

int len;


    WSADATA wsa;

WSAStartup(MAKEWORD(1,1),&wsa);//initial Ws2_32.dll by a process


memset(&addr, 0, sizeof(addr));


if((soc = socket(AF_INET,SOCK_DGRAM,0)) <= 0)

{

printf("Create socket fail!\n");

return -1;

}


addr.sin_family = AF_INET;

addr.sin_port = htons(9102);

addr.sin_addr.s_addr = htonl(INADDR_ANY);


if(bind(soc,(struct sockaddr *)&addr,sizeof(struct sockaddr))!=0)

{

printf("Bind fail!\n");

return -1;

}



len = sizeof(addr);

printf("start listen...\n");

while(1) {

recvfrom(soc, buf, BUFLEN, 0,(struct sockaddr*)&addr, &len);

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

}

WSACleanup();                     //关闭

return 0;

}

客户端代码:

//UDP client

//client send string to server


//Visual C++ 6.0


#include <stdio.h>

#include <winsock2.h>


#pragma comment(lib,"ws2_32.lib")


#define BUFLEN 1024


int main(void)

{

SOCKET soc;

SOCKADDR_IN addr;

unsigned char buf[BUFLEN];


    WSADATA wsa;

WSAStartup(MAKEWORD(2,2),&wsa);//initial Ws2_32.dll by a process


memset(&addr, 0, sizeof(addr));



if((soc = socket(AF_INET,SOCK_DGRAM,0)) <= 0)

{

printf("Create socket fail!\n");

return -1;

}

addr.sin_family = AF_INET;

addr.sin_addr.s_addr = inet_addr("127.0.0.1");

addr.sin_port = htons(9102);

bind(soc,(struct sockaddr *)&addr,sizeof(addr));


while(1) {

scanf("%s", buf);

sendto(soc, buf, strlen(buf)+1, 0, (struct sockaddr *)&addr, sizeof(addr));

}


WSACleanup();//clean up Ws2_32.dll

return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值