`
liufei.fir
  • 浏览: 685945 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Windows下纯C的Socket例子

阅读更多
/*******   服务器程序   (server.c)   ************/       
  #include   <stdlib.h>   
  #include   <stdio.h>   
  #include   <errno.h>   
  #include   <string.h>   
  #include   <netdb.h>   
  #include   <sys/types.h>   
  #include   <netinet/in.h>   
  #include   <sys/socket.h>   
  int   
  main   (int   argc,   char   *argv[])     
  {   
      int   sockfd,   new_fd;   
      struct   sockaddr_in   server_addr;   
      struct   sockaddr_in   client_addr;   
      int   sin_size,   portnumber;   
      char   hello[]   =   "Hello!   Are   You   Fine?\n";   
      if   (argc   !=   2)   
          {   
              fprintf   (stderr,   "Usage:%s   portnumber\a\n",   argv[0]);   
              exit   (1);   
          }   
      if   ((portnumber   =   atoi   (argv[1]))   <   0)   
          {   
              fprintf   (stderr,   "Usage:%s   portnumber\a\n",   argv[0]);   
              exit   (1);   
          }   
    
  /*   服务器端开始建立socket描述符   */   
      if   ((sockfd   =   socket   (AF_INET,   SOCK_STREAM,   0))   ==   -1)   
          {   
              fprintf   (stderr,   "Socket   error:%s\n\a",   strerror   (errno));   
              exit   (1);   
          }   
    
  /*   服务器端填充   sockaddr结构   */   
      bzero   (&server_addr,   sizeof   (struct   sockaddr_in));   
      server_addr.sin_family   =   AF_INET;   
      server_addr.sin_addr.s_addr   =   htonl   (INADDR_ANY);   
      server_addr.sin_port   =   htons   (portnumber);   
    
  /*   捆绑sockfd描述符   */     
          if   (bind   
  (sockfd,   (struct   sockaddr   *)   (&server_addr),   
    sizeof   (struct   sockaddr))   ==     
  -1)   
          {   
              fprintf   (stderr,   "Bind   error:%s\n\a",   strerror   (errno));   
              exit   (1);   
          }   
    
  /*   监听sockfd描述符   */   
      if   (listen   (sockfd,   5)   ==   -1)   
          {   
              fprintf   (stderr,   "Listen   error:%s\n\a",   strerror   (errno));   
              exit   (1);   
          }   
      while   (1)   
          {   
    
  /*   服务器阻塞,直到客户程序建立连接   */     
  sin_size   =   sizeof   (struct   sockaddr_in);   
              if   ((new_fd   =   
        accept   (sockfd,   (struct   sockaddr   *)   (&client_addr),   
        &sin_size))   ==   -1)   
  {   
      fprintf   (stderr,   "Accept   error:%s\n\a",   strerror   (errno));   
      exit   (1);   
  }   
              fprintf   (stderr,   "Server   get   connection   from   %s\n",   
                inet_ntoa   (client_addr.sin_addr));   
              if   (write   (new_fd,   hello,   strlen   (hello))   ==   -1)   
  {   
      fprintf   (stderr,   "Write   Error:%s\n",   strerror   (errno));   
      exit   (1);   
  }   
    
  /*   这个通讯已经结束   */   
              close   (new_fd);   
    
  /*   循环下一个   */     
          }   
      close   (sockfd);   
      exit   (0);   
  }   
    
/*******   客户端程序   client.c   ************/       
#include   <stdlib.h>   
#include   <stdio.h>   
#include   <errno.h>   
#include   <string.h>   
#include   <netdb.h>   
#include   <sys/types.h>   
#include   <netinet/in.h>   
#include   <sys/socket.h>   
    int   
main   (int   argc,   char   *argv[])     
{   
      
int   sockfd;   
      
char   buffer[1024];   
      
struct   sockaddr_in   server_addr;   
      
struct   hostent   *host;   
      
int   portnumber,   nbytes;   
      
if   (argc   !=   3)   
          
        {   
              
fprintf   (stderr,   "Usage:%s   hostname   portnumber\a\n",   argv[0]);   
              
exit   (1);   
          
}   
      
if   ((host   =   gethostbyname   (argv[1]))   ==   NULL)   
          
        {   
              
fprintf   (stderr,   "Gethostname   error\n");   
              
exit   (1);   
          
}   
      
if   ((portnumber   =   atoi   (argv[2]))   <   0)   
          
        {   
              
fprintf   (stderr,   "Usage:%s   hostname   portnumber\a\n",   argv[0]);   
              
exit   (1);   
          
}   
      
/*   客户程序开始建立   sockfd描述符   */     
        if   ((sockfd   =   socket   (AF_INET,   SOCK_STREAM,   0))   ==   -1)   
          
        {   
              
fprintf   (stderr,   "Socket   Error:%s\a\n",   strerror   (errno));   
              
exit   (1);   
          
}   
      
/*   客户程序填充服务端的资料   */     
        bzero   (&server_addr,   sizeof   (server_addr));   
      
server_addr.sin_family   =   AF_INET;   
      
server_addr.sin_port   =   htons   (portnumber);   
      
server_addr.sin_addr   =   *((struct   in_addr   *)   host->h_addr);   
      
/*   客户程序发起连接请求   */     
        if   (connect   
(sockfd,   (struct   sockaddr   *)   (&server_addr),   
  sizeof   (struct   sockaddr)     
)   ==   -1)   
          
        {   
              
fprintf   (stderr,   "Connect   Error:%s\a\n",   strerror   (errno));   
              
exit   (1);   
          
}   
      
/*   连接成功了   */     
        if   ((nbytes   =   read   (sockfd,   buffer,   1024))   ==   -1)   
          
        {   
              
fprintf   (stderr,   "Read   Error:%s\n",   strerror   (errno));   
              
exit   (1);   
          
}   
      
buffer[nbytes]   =   '\0';   
      
printf   ("I   have   received:%s\n",   buffer);   
      
/*   结束通讯   */     
        close   (sockfd);   
      
exit   (0);   
  
}   
分享到:
评论

相关推荐

    windows下C语言socket

    在Windows环境下进行C语言编程,Socket是实现网络通信的基础接口,它允许程序通过网络发送和接收数据。本教程将深入探讨如何使用C语言在Windows操作系统上构建简单的TCP服务器和客户端。 首先,我们要了解socket的...

    socket linux c & windows c# windows客户端,服务器程序和linux下客户端,服务器程序。一共四个经典程序并有详细的注释。细细的阅读,一定会有收获。

    在本资源中,包含了Linux C语言和Windows C#平台下的服务器和客户端程序,覆盖了TCP协议的实现。接下来,我们将深入探讨这些知识点。 1. **Socket接口**: Socket是操作系统提供的一个接口,它允许应用程序通过...

    HPSocket C++控制台版DEMO.rar

    一个开源的高性能IOCP(完成端口)网络通信封装框架《HP-Socket》的使用实例,官方的DEMO只有MFC对话框的版本,对于刚接触这个框架的新手不太容易把代码移植到自己的项目。 此DEMO使用标准C++控制台来实现,对于刚...

    Windows下C语言网络编程快速入门

    在Windows环境下进行C语言网络编程,首先需要具备一定的C语言基础和对计算机系统的基本理解。在传统的C语言学习路径中,通常会先学习C语言,然后是C++,再逐步涉及汇编语言和微机原理。然而,对于Windows C编程,你...

    Socket编程例子_MFC

    在`Socket编程例子_MFC`这个压缩包中,可能包含了一个简单的C/S程序示例,展示了如何在MFC工程中集成Socket通信。可能包含客户端的`.cpp`和`.h`文件,以及服务器端的相应文件。代码中可能使用了`CSocket`类及其派生...

    C++ 实现基础SOCKET有例子(局域网聊天)

    在Windows下,这通常涉及调用`WSAStartup()`函数,传入版本信息和一个指向WSADATA结构的指针,用于获取WSA的详细信息。 2. **创建SOCKET**:接着,我们需要创建一个SOCKET实例。可以使用`socket()`函数,传入地址族...

    C语言的经典例子 经典 经典

    这涉及到网络编程,C语言可以用于编写底层的网络应用,比如处理TCP/IP协议栈,进行socket通信。这个程序可能是通过调用操作系统提供的API来实现IP地址的设置,展示了C语言在系统编程中的应用。 最后,"说明.txt"很...

    raw socket编程例子

    在Windows和Linux等操作系统中,可以使用`socket()`函数创建一个原始套接字。在创建时,需要指定套接字类型为`SOCK_RAW`,并指定相应的协议,例如` IPPROTO_IP`(用于IP层操作)或` IPPROTO_TCP`/` IPPROTO_UDP`...

    Windows下C语言网络编程快速入门 还有例子哦

    ### Windows 下 C 语言网络编程快速入门 在 Windows 平台上使用 C 语言进行网络编程是一种常见的技术手段,尤其对于那些需要与操作系统底层交互的应用程序来说尤为重要。本文将基于提供的内容,详细介绍 Windows 下...

    C实现基于Socket实现自定义协议通信

    在这个例子中,我们可能需要使用流式Socket,因为它提供了一种面向连接、可靠的通信方式。 接下来,服务端需要调用`bind()`函数将Socket与一个特定的IP地址和端口号绑定。然后,使用`listen()`函数设置Socket为监听...

    windows C语言库函数使用手册

    总结,"Windows C语言库函数使用手册"是一份涵盖Windows平台上C语言编程必备知识的资源,通过深入学习和实践,开发者可以掌握在Windows环境下编写高效、稳定的应用程序所需的技能。这份手册应包含详尽的函数介绍、...

    C#高性能大容量SOCKET并发完成端口例子.rar

    而"C#高性能大容量SOCKET并发完成端口例子完整实例源码"则是本次讨论的核心,包含了具体的C#代码实现,你可以通过阅读和分析这些源码,深入理解如何在C#中利用完成端口实现高效的Socket并发处理。

    简明Socket编程指南

    DOS平台下的TCP/IP编程主要依赖于WATTCP函数库,这是一个由加拿大Waterloo大学的Erick Engelke开发的C语言函数库。与Unix Socket相比,WATTCP提供了一个更简单直观的编程接口。由于DOS缺乏强大的网络文件系统,因此...

    TCPIP Socket PGM transition from UNIX to Windows

    为了更好地理解 UNIX 和 Windows Socket 编程之间的区别,我们将通过一个具体的例子——TCP Echo 客户端来演示: #### 3.1 UNIX 版本 ```c #include &lt;sys/socket.h&gt; #include #include int main(int argc, char ...

    Socket编程经典例子源码.zip

    这个"Socket编程经典例子源码.zip"文件包含了一些使用Visual C++编写的示例代码,用于帮助初学者理解和掌握Socket编程的基本概念和操作。让我们深入探讨一下Socket编程、TCP通信以及在C++环境下的实现。 Socket,...

    php的socket编程例子

    1. 包含两个例子本人在comsenseEXP上运行过木有问题。 2. 例子syn是采用阻塞模式做的 3. 例子select是采用select(非阻塞模式)做的。 运行方法: a.安装comsenseEXP,配置windows上php环境变量(目的是使得win...

    windows下的udp套接字c源码用例例子

    在Windows环境下,UDP(User Datagram Protocol)套接字是网络编程中的一个重要概念,它主要用于实现无...通过理解这些基础概念和函数,你可以分析并学习这两个源码文件,进一步掌握UDP套接字在Windows下的C语言实现。

Global site tag (gtag.js) - Google Analytics