vc下socket编程步骤

 vc下网络编程需注意:
       1. 加上链接文件ws2_32.lib
       2.头文件包含 winsock.h
 
编写步骤如下:
sockets(套接字)编程有三种:流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW)。
基于TCP的socket编程是采用的流式套接字。
 
服务器端编程的步骤: 
 1:加载套接字库,创建套接字(WSAStartup()/socket());
 2:绑定套接字到一个IP地址和一个端口上(bind());
 3:将套接字设置为监听模式等待连接请求(listen());
 4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());
 5:用返回的套接字和客户端进行通信(send()/recv());
 6:返回,等待另一连接请求;
 7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
服务器端代码如下:
#include <stdio.h>
#include <WINSOCK2.H>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
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 addrSrv;
     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
     addrSrv.sin_family = AF_INET;
     addrSrv.sin_port = htons(6000);
     bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR));
     listen(sockSrv, 5);
     SOCKADDR_IN addrClient;
     int len = sizeof(SOCKADDR);
     while(1)
     {
         SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
         char sendBuf[50];
         sprintf(sendBuf, "Welcome %s to here!", inet_ntoa(addrClient.sin_addr));
         send(sockConn, sendBuf, strlen(sendBuf)+1, 0);
         char recvBuf[50];
         recv(sockConn, recvBuf, 50, 0);
         printf("%s/n", recvBuf);
         closesocket(sockConn);
    }
}

客户端编程的步骤:
 1:加载套接字库,创建套接字(WSAStartup()/socket());
 2:向服务器发出连接请求(connect());
 3:和服务器端进行通信(send()/recv());
 4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
客户端的代码如下:
#include <stdio.h>
#include <WINSOCK2.H>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
void main()
{
     WORD wVersionRequested;
     WSADATA wsaData;
     int err;
     wVersionRequested = MAKEWORD(1, 1);
     err = WSAStartup(wVersionRequested, &wsaData);
     if (err != 0)
     {
         return;
     }
     SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
     SOCKADDR_IN addrSrv;
     addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
     addrSrv.sin_family = AF_INET;
     addrSrv.sin_port = htons(6000);
     connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
     send(sockClient, "Hello", strlen("hello")+1, 0);
     char recvBuf[50];
     recv(sockClient, recvBuf, 50, 0);
     printf("%s/n", recvBuf);
     closesocket(sockClient);
     WSACleanup();
}
ZZ:http://blog.csdn.net/DreamLovely/archive/2008/12/17/3537328.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值