zoukankan      html  css  js  c++  java
  • 网络编程

      1 // Server.cpp : 定义控制台应用程序的入口点。
      2 //
      3 
      4 #include "stdafx.h"
      5 #include <iostream>
      6 #include <winsock2.h>
      7 
      8 #pragma comment(lib, "ws2_32.lib")        // 加载静态库
      9 
     10 using namespace std;
     11 
     12 int _tmain(int argc, _TCHAR* argv[])
     13 {
     14     ////////////////////////////////【1.加载套接字】///////////////////////////////
     15     //
     16     WSADATA wsaData;
     17     // 等于0 说明创建套接字成功, 否则失败!
     18     if ( 0 != WSAStartup(MAKEWORD(2, 2), &wsaData) )
     19     {
     20         cout<< "【WSAStartup】失败!
    " << endl;
     21         return 0;
     22     }
     23     cout<< "加载套接字成功^_^
    " << endl;
     24 
     25 
     26     ////////////////////////////////【2.创建套接字】///////////////////////////////
     27     //
     28     SOCKET m_Sock;
     29     m_Sock = socket(AF_INET, SOCK_STREAM, 0);
     30     if (INVALID_SOCKET == m_Sock)
     31     {
     32         cout<< "【socket】失败!
    " << endl;
     33         WSACleanup();
     34         return 0;
     35     }
     36     cout<< "创建套接字成功^_^
    " << endl;
     37 
     38 
     39     ////////////////////////////////【3.绑定套接字】///////////////////////////////
     40     //
     41     sockaddr_in    bindAddr;
     42     bindAddr.sin_family = AF_INET;                    // 协议族
     43     bindAddr.sin_port    = htons(9527);                    // 端口:9527 , 1234
     44     bindAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);        // 任何IP地址:127.0.0.1
     45     int nBindRet = bind(m_Sock, (sockaddr*)&bindAddr, sizeof(sockaddr_in));
     46     if ( SOCKET_ERROR == nBindRet )
     47     {
     48         cout<< "【bind】失败!
    " << endl;
     49         closesocket(m_Sock);    // 关闭套接字
     50         WSACleanup();        // 卸载套接字
     51         return 0;
     52     }
     53     cout<< "绑定套接字成功^_^
    " << endl;
     54 
     55 
     56     ////////////////////////////////【4.监听套接字】///////////////////////////////
     57     //
     58     int nListenRet = listen(m_Sock, 5);        // 最大能监听5个
     59     if ( SOCKET_ERROR == nListenRet )
     60     {
     61         cout<< "【listen】失败!
    " << endl;
     62         closesocket(m_Sock);
     63         WSACleanup();
     64         return 0;
     65     }
     66     cout<< "Listening . . .
    " << endl;
     67 
     68 
     69     ////////////////////////////////【5.接受套接字】///////////////////////////////
     70     //
     71     SOCKET    accSock;    // 为服务端接受客户端连接成功后, 产生的用于与客户端通信的socket.
     72     sockaddr_in    accAddr;    // 接受客户端发送过来的 端口 / IP地址等信息
     73     int accSize = sizeof(sockaddr_in);
     74     accSock = accept(m_Sock, (sockaddr*)&accAddr, &accSize);
     75     if ( INVALID_SOCKET == accSize )
     76     {
     77         cout<< "【accept】失败!
    " << endl;
     78         closesocket(m_Sock);
     79         WSACleanup();
     80         return 0;
     81     }
     82     cout<< "成功连接客户端^_^
    " << endl;
     83 
     84     
     85     ////////////////////////////////【6.发送消息】///////////////////////////////
     86     //
     87     int nSend = send(accSock, "欢迎你登陆", sizeof("欢迎你登陆"), 0);
     88     if ( nSend <= 0 )
     89     {
     90         cout<< "【send】失败!
    " << endl;
     91         closesocket(accSock);
     92         closesocket(m_Sock);
     93         WSACleanup();
     94         return 0;
     95     }
     96 
     97     
     98     while (TRUE)
     99     {
    100         ////////////////////////////////【7.接收消息】///////////////////////////////
    101         //
    102         char szRecvBuff[256] = { 0 };
    103         int nRecv = recv(accSock, szRecvBuff, sizeof(szRecvBuff), 0);
    104         if ( SOCKET_ERROR == nRecv )
    105         {        
    106             cout<< "【recv】失败!
    " << endl;
    107             Sleep(50);
    108             continue;
    109         }
    110         cout<< szRecvBuff << endl;
    111 
    112 
    113         ////////////////////////////////【8.发送消息】///////////////////////////////
    114         //
    115         char szSendBuff[256] = { 0 };
    116         cin>> szSendBuff;                // 向客户端发送的内容
    117         int nSend2 = send(accSock, szSendBuff, sizeof(szSendBuff), 0);
    118         if ( SOCKET_ERROR == nSend2 )
    119         {        
    120             cout<< "【send2】失败!
    " << endl;
    121             Sleep(50);
    122             continue;
    123         }
    124         
    125     }
    126 
    127     getchar();
    128     closesocket(m_Sock);
    129     WSACleanup();
    130     return 0;
    131 }
    View Code
  • 相关阅读:
    ubuntu下erlang man的安装
    ranch分析学习(四)
    ranch分析学习(三)
    ranch分析学习(二)
    ranch分析学习(一)
    IIS 配置错误解决方法集合
    Visual Studio 2013中添加mimeType
    wordpress 开发日志及技巧收集
    css3 动画
    高宽比例计算方法及等比高宽修改计算方法
  • 原文地址:https://www.cnblogs.com/DuanLaoYe/p/5650805.html
Copyright © 2011-2022 走看看