`
liufei.fir
  • 浏览: 678554 次
  • 性别: 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);   
  
}   
分享到:
评论

相关推荐

    HPSocket C++控制台版DEMO.rar

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

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

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

    php的socket编程例子

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

    sokect通信c#

    sokect通信程序c# 一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。

    C语言用POST GET 请求网页

    利用C语言用socket请求网页,GET百度首页,接收返回数据

    unix平台下c语言高级编程指南

    本书范例丰富,且具有代表性,如Socket编程、客户/服务端编程、多线程开发、CGI编程、X Windows下的Motif编程等。读者直接或只需稍作修改就可以将它们应用到自己的应用程序开发中。这些范例的源代码可以从配套光盘的...

    VC++ MFC Socket编程例子

    摘要:VC/C++源码,数据库应用,Socket ...VC++ MFC Socket编程例子,C/S结构的程序,分客户端和服务端,Server端又分两个版本:一个是MFC,一个是SDK版本,VC6.0环境下可顺利编译。 运行环境:Windows/Visual C/C++

    socket网络编程

    一个简单的socket网络编程例子: 服务器代码: #include &lt;winsock2.h&gt; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; #pragma comment(lib,"ws2_32.lib") //这句话的意思是加载ws2_32.lib这个...

    Xamarin使用C#开发IOS程序-socket与突破3分钟后台运行限制

    C、本例子中,还实现了另外一个功能,就是ios程序与PC程序进行socket。当然是最为简单的。 ---------------- 由于本人也是刚刚使用c#开发ios程序,初入门,为了这两个问题,也是研究了很久,可查的资料又很少。 ...

    C语言编写的HTTP下载库 0.9版

    参考了周立发的例子和HTTP协议详解 用C语言编写的一个HTTP下载库,还带了一个...因为公司的环境是ubuntu,所以目前还没来得及写windows的版本,但留了跨平台接口,只需加些widnows头文件和Windows的socket初始化即可。

    socket文件传输源码

    可以作为socket编程的一个例子来学习。 [2. 文件介绍] 程序中使用socket实现了文件的传输。 在VC6.0中编译通过,目录中olfile.cpp/olfile.h是原文件,可以任意修改,不过请不要改动文件头的作者信息。 有两个...

    易语言-Hp-Socket For E 5.4.2 高性能TCP/UDP通信组件 源码+模块+例程

    HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。 [15:47 2018/11/05] 同步更新到5.4.2正式版 [10:37 2018/10/23] 1、英文模块IHttpSyncClient组件大改 2、IWinHttp组件添加若干命令(PS:忘记是哪些了。...

    基于io复用的服务器开发例子

    使用epoll实现io复用,多个服务器同时与多个客户端连接。

    C++基于TCP和UDP的socket通信

    以下是关于socket编程的一个非常经典的例子:  服务端: #include #include &lt;Winsock2&gt; //windows socket的头文件 #pragma comment( lib, "ws2_32.lib" )// 链接Winsock2.h的静态库文件 void main() { //...

    MyControlComputer(java).rar_C++与android通信_android_手机与电脑

    通过Android手机去关闭电脑,...在学习的过程中发现,关于C语言与java通过socket通信这方面比较少入门级的简单易懂的例子,在C的cpp里面写了一下一些学到的东西,不足之处望指导。java实现socket比较简单,就不写了。

    寒江独钓-Windows内核安全编程(高清完整版).part4

    10.1.2 从socket到Windows内核 297 10.1.3 TDI过滤的代码例子 299 10.2 TDI的过滤框架 299 10.2.1 绑定TDI的设备 299 10.2.2 唯一的分发函数 300 10.2.3 过滤框架的实现 302 10.2.4 主要过滤的请求类型 304 10.3 ...

    Windows内核安全与驱动开发光盘源码

    14.1.2 从socket到Windows内核 318 14.1.3 TDI过滤的代码例子 319 14.2 TDI的过滤框架 319 14.2.1 绑定TDI的设备 319 14.2.2 唯一的分发函数 320 14.2.3 过滤框架的实现 322 14.2.4 主要过滤的请求类型 323 ...

    MFC网络编程之自制浏览器

     CAsyncSocket类在较低层次上封装了Windows Socket API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows Socket API默认情况下工作在阻塞模式,不方便直接在消息驱动的Windows程序上使用)...

    寒江独钓-Windows内核安全编程(高清完整版).part7

    10.1.2 从socket到Windows内核 297 10.1.3 TDI过滤的代码例子 299 10.2 TDI的过滤框架 299 10.2.1 绑定TDI的设备 299 10.2.2 唯一的分发函数 300 10.2.3 过滤框架的实现 302 10.2.4 主要过滤的请求类型 304 10.3 ...

    寒江独钓-Windows内核安全编程(高清完整版).part1

    10.1.2 从socket到Windows内核 297 10.1.3 TDI过滤的代码例子 299 10.2 TDI的过滤框架 299 10.2.1 绑定TDI的设备 299 10.2.2 唯一的分发函数 300 10.2.3 过滤框架的实现 302 10.2.4 主要过滤的请求类型 304 10.3 ...

Global site tag (gtag.js) - Google Analytics