大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks


服务器端:
1、创建一个套接字,并调用bind()与本机地址绑定。
2、将套接字设置为监听模式。
3、通过accept()来接受客户端的连接。当客户端连接时,accept返回新的SOCKET。
4、使用新的SOCKET与客户端通信。

客户端:
1、创建一个套接字。
2、向服务器地址调用connect(),初始化连接。
3、连接成功后使用SOCKET于服务器端通信。

收发数据:
send:向已建立连接的套接字发送数据。
recv:从已建立连接的套接字收数据。阻塞式的,收到数据后返回。
数据的收发都是以char为单位。

关闭连接:
shutdown:表示不再此套接字上收发数据。
closesocket:关闭套接字


服务器端:
    //初始化使用socket函数要用到的dll
    WSADATA wd;
    ::WSAStartup(MAKEWORD(
2,2), &wd);

    
//本机地址信息
    sockaddr_in addr;
    addr.sin_family            
= AF_INET;
    addr.sin_port            
= htons(1555);
    addr.sin_addr.s_addr    
= inet_addr("127.0.0.1");

    
//创建套接字,并与本机地址绑定
    SOCKET s = ::socket(AF_INET, SOCK_STREAM, 0);
    ::bind(s, (
const sockaddr*)&addr, sizeof(addr));
    
    
//监听该套接字,准备接收连接
    ::listen(s, 2);

    
//等待客户端连接,若客户端连接则返回,否则一直等待
    
//返回结果是用来通信的新套接字
    sockaddr_in client_addr;
    SOCKET ns 
= ::accept(s, (sockaddr*)&client_addr, NULL);

    
//在新套接字上收数据
    while(1)
    
{
        
char cBuffer[1024= {0};
        ::recv(ns, cBuffer, 
10240);
        cout
<<cBuffer<<endl;
    }


    
//关闭套接字
    ::closesocket(ns);
    ::closesocket(s);

    
//ws2.dll的收尾工作
    ::WSACleanup();

客户端:
    //初始化使用socket函数要用到的dll
    WSADATA wd;
    WSAStartup(MAKEWORD(
2,2), &wd);

    
//服务器地址信息
    sockaddr_in addr;
    addr.sin_family            
= AF_INET;
    addr.sin_port            
= htons(1555);
    addr.sin_addr.s_addr    
= inet_addr("127.0.0.1");

    
//创建套接字,并与服务器连接
    SOCKET s = ::socket(AF_INET, SOCK_STREAM, 0);
    ::connect(s, (
const sockaddr*)&addr, sizeof(addr));

    
//发送数据
    while(1)
    
{
        
char cData[1024= {0};
        cin
>>cData;
        ::send(s, cData, (
int)strlen(cData)+10);
    }


    
//关闭套接字
    ::closesocket(s);

    
//ws2.dll的收尾工作
    ::WSACleanup();
posted on 2009-06-26 14:53 大胖 阅读(249) 评论(0)  编辑 收藏 引用 所属分类: Win32

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理