zoukankan      html  css  js  c++  java
  • 简单的TCPIP 客户端 服务器

     1 // soClient.cpp : Defines the entry point for the console application.
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <winsock2.h>
     6 #pragma comment(lib,"ws2_32.lib")
     7 
     8 int _tmain(int argc, _TCHAR* argv[])
     9 {
    10     WSADATA wsadata;
    11     WORD dVer=MAKEWORD(2,2);
    12     WSAStartup(dVer,&wsadata);
    13 
    14     SOCKET S=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    15     if(S==INVALID_SOCKET)
    16     {
    17         return FALSE;
    18     }
    19     sockaddr_in serverAddr;
    20     serverAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    21     serverAddr.sin_family=AF_INET;
    22     serverAddr.sin_port=htons(4567);
    23     if(::connect(S,(LPSOCKADDR)&serverAddr,sizeof(serverAddr))==SOCKET_ERROR)
    24     {
    25         if(WSAGetLastError()==10061)
    26         {
    27             printf("服务器未开启");
    28         }
    29         return FALSE;
    30     }
    31 
    32     char buff[256];
    33     int irecv=::recv(S,buff,256,0);
    34     if(irecv>0)
    35     {
    36         buff[irecv] = '';  //返回数据不会结束所以人工添加
    37         printf("返回数据为:%s",buff);
    38     }
    39     
    40     closesocket(S);
    41     return 0;
    42 }

     服务器

     1 // soServer.cpp : Defines the entry point for the console application.
     2 //
     3 
     4 #include "stdafx.h"
     5 #include "winsock2.h"
     6 #pragma comment(lib,"ws2_32.lib")
     7 
     8 int _tmain(int argc, _TCHAR* argv[])
     9 {
    10     WSADATA wsadata;
    11     WORD dVer=MAKEWORD(2,2);
    12     if(WSAStartup(dVer,&wsadata)!=0)
    13     {
    14         return FALSE;
    15     }
    16 
    17     sockaddr_in sin;
    18     sin.sin_family=AF_INET;
    19     sin.sin_addr.S_un.S_addr=INADDR_ANY;
    20     sin.sin_port=htons(4567);
    21     SOCKET S=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    22     
    23 
    24     if(::bind(S,(LPSOCKADDR)&sin,sizeof(sin))==SOCKET_ERROR)
    25     {
    26         return FALSE;
    27     }
    28 
    29     if(::listen(S,2)==SOCKET_ERROR)
    30     {
    31         return FALSE;
    32     }
    33 
    34     sockaddr_in remoteAddr; 
    35     int nAddrLen = sizeof(remoteAddr);
    36     SOCKET sClient;
    37     char text[]="you have connected!welcome!";
    38     printf("等待接受连接。
    ");
    39     while(TRUE)
    40     {
    41         sClient=::accept(S,(LPSOCKADDR)&remoteAddr,&nAddrLen);
    42         if(sClient==SOCKET_ERROR)
    43         {
    44             printf("获取失败");
    45             continue;
    46         }
    47         printf("接收到新连接:%s",inet_ntoa(remoteAddr.sin_addr));
    48         send(sClient,text,strlen(text),0);
    49         closesocket(sClient);
    50     }
    51     closesocket(S);
    52     return 0;
    53 }
  • 相关阅读:
    apache和tomcat有什么不同,为什么要整合apache 和tomcat?
    servlet
    关于Spring配置文件xml文档的schema约束
    request对象和response对象
    多线程
    数据结构得到连续数据的手段java Enumeration
    程序员八荣八耻
    windows更改MySQL存储路径
    Tomcat源码学习(1)
    Tomcat源码学习(2)——启动过程分析
  • 原文地址:https://www.cnblogs.com/Browneyes/p/4962406.html
Copyright © 2011-2022 走看看