今天在Linux环境下写了一个最简单的TCP Client程序,没想到Linux环境下的头文件竟然这么分散,让我这样的菜鸟很是郁闷啊。编译成功的代码如下:

  1. #include <iostream>
  2. #include <string.h>
  3. #include <sys/socket.h> // Not need!
  4. #include <netinet/in.h> // struct sockadd_in, htons()
  5. #include <arpa/inet.h> // inet_addr()
  6. #include <unistd.h> // close()
  7.  
  8. int main(int argc, char** argv)
  9. {
  10. if(argc < )
  11. {
  12. std::cout << "Usage: tcpClient [target IP]" << std::endl;
  13. return -;
  14. }
  15.  
  16. struct sockaddr_in sin;
  17. sin.sin_family = AF_INET;
  18. sin.sin_port = htons();
  19. sin.sin_addr.s_addr = inet_addr(argv[]);
  20.  
  21. int cClient = socket(AF_INET, SOCK_STREAM, );
  22. if(cClient < )
  23. {
  24. std::cout << "socket failure!" << std::endl;
  25. return -;
  26. }
  27. if(connect(cClient, (struct sockaddr*)&sin, sizeof sin) < )
  28. {
  29. std::cout << "connect failue!" << std::endl;
  30. return -;
  31. }
  32. char szLine[];
  33. while(std::cin >> szLine)
  34. {
  35. if(strcmp(szLine, "exit") == )
  36. {
  37. std::cout << "Bye!" << std::endl;
  38. break;
  39. }
  40. int sLen = send(cClient, szLine, strlen(szLine), );
  41. if (sLen <= )
  42. {
  43. std::cout << "send error!" << std::endl;
  44. break;
  45. }
  46. sLen = recv(cClient, szLine, sizeof szLine, );
  47. if(sLen <= )
  48. {
  49. std::cout << "recv error!" << std::endl;
  50. return -;
  51. }
  52. szLine[sLen] = '\0';
  53. std::cout << "Received:" << szLine << std::endl;
  54. }
  55. close(cClient);
  56.  
  57. return ;
  58. }

  看来我在Windows下待习惯了,我以为这么简单的socket编程只需要一个#include <sys/socket.h>就行了呢!没想到这个头文件竟然是没有用的。而真正有用的是接下来的三个文件(上面代码中红色加粗的部分),这三个头文件分别定义了代码中涉及到的相关结构体和接口函数。当然,我这个用的是C++函数,所以应该用g++编译:

  1. [xiaoku@localhost tcpClient]$ g++ main.cpp -o tcpClient

[原]一个简单的Linux TCP Client所涉及到的头文件的更多相关文章

  1. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  2. 第三节 构造一个简单的Linux系统MenuOS——20135203齐岳

    第三节 构造一个简单的Linux系统MenuOS By 20135203齐岳 Linux内核源代码 arch/ 支持不同cpu的源代码 Documentations/ 文档存储 init/ 内核启动相 ...

  3. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

  4. Linux内核分析— —构造一个简单的Linux系统MenuOS(20135213林涵锦)

    Linux内核分析— —构造一个简单的Linux系统MenuOS 实验内容 Linux内核的启动过程,从start_kernel到init进程启动 使用实验楼的虚拟机打开shell cd LinuxK ...

  5. 《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 一.linux内核源代码简介 三大法宝(存储程序计算机.函数调用堆栈.中断)和两把宝剑(中断上下文的切换:保存现场和恢复现场.进程上下文的切换) 1.在lin ...

  6. 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记

    此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...

  7. 《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS

    郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周 构造一个简单的Linux系统Me ...

  8. 20135220谈愈敏Blog3_构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1 ...

  9. 第三周:构造一个简单的LINUX系统MENUOS

    吕松鸿 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

随机推荐

  1. 第三个Sprint完结工作 用场景来规划测试工作.

    一.根据用户使用场景测试: 1.流程 典型群体 群体 张小明 年龄 7-12岁 职业 小学生 收入 压岁钱还有零花钱 能力 看一些简单的数,做一些相对简单的事 爱好 玩游戏 典型场景 张小明平时喜欢玩 ...

  2. ubuntu中常用快捷键

    本文转自 http://yife.im/ubuntu-terminal-shortcode/ 原文的格式会比较好看. Ubuntu终端常用的快捷键 Oct 3, 2013 • 23,469 views ...

  3. MAVEN ERROR : Dynamic Web Module 3.0 requires Java 1.6 or newer

    问题: 在eclipse中,通过Maven->Update Project更新项目后,出现Dynamic Web Module 3.0 requires Java 1.6 or newer错误提 ...

  4. 112. Path Sum

    Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...

  5. android之官方下拉刷新组件SwipeRefreshLayout

    1.setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener):设置手势滑动监听器. 2.setProgressBackgr ...

  6. hdu1114 Piggy-Bank ——完全背包

    link:http://acm.hdu.edu.cn/showproblem.php?pid=1114 只不过求得是最小值.没什么可说的,连我都会做……o(╯□╰)o /* ID: zypz4571 ...

  7. JQ添加移除css样式--转载 心存善念

    我们常常要使用Javascript来改变页面元素的样式.其中一种办法是改变页面元素的CSS类(Class),这在传统的Javascript里,我们通常是通过处理HTML Dom的classname特性 ...

  8. System program problem detected 解决

    每次开机都出现:System program problem detected 管理员权限打开:/etc/default/apport   su root   vim /etc/default/app ...

  9. HDU5934 Bomb(2016杭州CCPC第二题)(强连通缩点)

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. URAL 1176 Hyperchannels(欧拉回路路径)

    Hyperchannels Time limit: 1.0 secondMemory limit: 64 MB The Galaxy Empire consists of N planets. Hyp ...