• 客户端代码
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<sys/socket.h>
  5. #include<sys/types.h>
  6. #include<unistd.h>
  7. #include<netinet/in.h>
  8. #include <errno.h>
  9.  
  10. int main(int argc, char** argv){
  11.  
  12. int socketfd = ;
  13. char sendbuf[];
  14. char recvbuf[];
  15. struct sockaddr_in server_addr;
  16. int port = ;
  17. int nbytes;
  18.  
  19. if((socketfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == ){
  20. fprintf(stderr, "socket Error:%s\n\a", strerror(errno));
  21. exit();
  22. }
  23.  
  24. bzero(&server_addr, sizeof(struct sockaddr_in));
  25. server_addr.sin_family = AF_INET;
  26. server_addr.sin_port = htons(port);
  27. server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  28.  
  29. if((connect(socketfd, &server_addr, sizeof(server_addr))) == -){
  30. fprintf(stderr, "connect Error:%s\n\a", strerror(errno));
  31. exit();
  32. }
  33.  
  34. while(){
  35.  
  36. nbytes = recv(socketfd, recvbuf, sizeof(recvbuf), );
  37. recvbuf[nbytes] = '\0';
  38.  
  39. printf("recv data is:%s\n",recvbuf);
  40.  
  41. printf("Input:");
  42. scanf("%s", sendbuf);
  43.  
  44. send(socketfd, sendbuf, sizeof(sendbuf), MSG_NOSIGNAL);
  45. }
  46.  
  47. close(socketfd);
  48.  
  49. exit();
  50. }
  • 服务器端代码
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<sys/socket.h>
  5. #include<sys/types.h>
  6. #include<unistd.h>
  7. #include<netinet/in.h>
  8. #include <signal.h>
  9. #include <errno.h>
  10.  
  11. int main(int argc, char** argv){
  12. int old_fd,new_fd;
  13. struct sockaddr_in server_addr;
  14. struct sockaddr_in client_addr;
  15. char recvbuf[];
  16. int port = ;
  17. int len,nbytes;
  18.  
  19. if((old_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == ){
  20. fprintf(stderr, "socket Error:%s\n\a", strerror(errno));
  21. exit();
  22. }
  23.  
  24. bzero(&server_addr, sizeof(struct sockaddr_in));
  25. server_addr.sin_family = AF_INET;
  26. server_addr.sin_port = htons(port);
  27. server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  28.  
  29. if((bind(old_fd, &server_addr, sizeof(server_addr))) == -){
  30. fprintf(stderr, "bind Error:%s\n\a", strerror(errno));
  31. exit();
  32. }
  33.  
  34. //listen的第二个参数backlog为内核缓存队列长度,该队列针对每个监听套接字包含两个队列:
  35. //一是未完成三次握手的,二是完成三次握手的
  36. if(listen(old_fd, ) == -){
  37. fprintf(stderr, "listen Error:%s\n\a", strerror(errno));
  38. exit();
  39. }
  40.  
  41. while(){
  42. len = sizeof(struct sockaddr_in);
  43. if ((new_fd = accept(old_fd,
  44. (struct sockaddr *)&client_addr,
  45. &len)) == -) {
  46. fprintf(stderr, "Accept error:%s\n\a", strerror(errno));
  47. exit();
  48. }
  49.  
  50. while(){
  51. if (send(new_fd, "hello fredric", strlen("hello fredric"), MSG_NOSIGNAL) == -) {
  52. fprintf(stderr, "send error:%s\n", strerror(errno));
  53. exit();
  54. }
  55.  
  56. nbytes = recv(new_fd, recvbuf, sizeof(recvbuf), );
  57. recvbuf[nbytes] = '\0';
  58.  
  59. printf("recv data is:%s\n",recvbuf);
  60. }
  61.  
  62. close(new_fd);
  63. }
  64.  
  65. close(old_fd);
  66. exit();
  67. }

Linux 网络编程(TCP)的更多相关文章

  1. Linux网络编程——tcp并发服务器(poll实现)

    想详细彻底地了解poll或看懂下面的代码请参考<Linux网络编程——I/O复用之poll函数> 代码: #include <string.h> #include <st ...

  2. Linux 网络编程——TCP

    环境:Linux  C   一.协议介绍      TCP是面向连接的协议,提供可靠的数据传输:TCP协议的可靠传输基于三次握手.四次挥手以及确认重传机制实现.下面来具体展示下TCP的三次握手.四次挥 ...

  3. Linux网络编程-tcp缓存设置

    最近发现服务的逻辑完成时间很短,但是上游接收到的时间比较长,所以就怀疑是底层数据的序列化/反序列化.读写.传输有问题,然后怀疑是TCP的读写缓存是不是设置太小.现在就记录下TCP缓存的各配置项以及缓存 ...

  4. linux网络编程tcp

    之前学习的时候笔记没有保存好,这次重新编写一个案例. 客户端实现程序代码: #include <string.h> #include <stdlib.h> #include & ...

  5. Linux网络编程学习路线

    转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程   1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...

  6. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    [Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...

  7. TCP/UDP Linux网络编程详解

    本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信. 内容目录 1. 目标2.Linux网络编程基础2.1 嵌套字2.2 端口2.3 网络地址2.3.1 ...

  8. 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"

    [深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...

  9. 【linux草鞋应用编程系列】_5_ Linux网络编程

    一.网络通信简介   第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章.   二.linux网络通信     在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...

  10. Linux 网络编程(IO模型)

    针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...

随机推荐

  1. Oracle 服务器端执行带参数的procedure

    进入服务器后 su - oracle sqlplus schema/schemapass 连接上以后,输入以下,然后执行 declare vRet number(5) := 8; begin proc ...

  2. vim深入研究

    About VIM--Unix及类Unix系统文本编辑器 Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是纯粹的自由软件. Vim普遍被推崇 ...

  3. 云存储的那些事(2)——数据分布算法CRUSH

    在分布式系统中,数据最终还是要存储到物理设备上的,ceph的底层设备抽象角色是OSD,那么数据是如何被决定放在哪块OSD上的,答案就是CRUSH算法. 关键字:CRUSH.一致性hash.ceph数据 ...

  4. Maemo平台上如何使用Openvpn

    Maemo是一个开源的智能手机软件平台社区,它是基于Debia的LInux发行版本,Maemo的大多是开源的,并已经制定了Maemo和诺基亚内部的设备与许多开源项目,例如,Debian的Linux内核 ...

  5. Maven中配置默认JDK版本

    使用Maven构建项目时,默认是使用jdk1.3版本,目前很多使用泛型的项目肯定是无法通过编译,除了修改项目的pom文件外,还可以在Maven的配置文件settings.xml中添加如下配置来解决: ...

  6. discuz MVC结构分析

    Discuz软件经解压后产生的三个文件夹中的一个叫upload的成为网站的根目录.里面的内容可以在某些网站上在线阅读,如用好库编程网.也可以离线在本地阅读,如用VS.Php for Visual St ...

  7. Java正则表达式的解释说明

    1.字符x    字符 x.例如a表示字符a\\    反斜线字符.在书写时要写为\\\\.(注意:因为java在第一次解析时,把\\\\解析成正则表达式\\,在第二次解析时再解析为\,所以凡是不是1 ...

  8. SSE and Websocket

    http://www.w3school.com.cn/html5/html_5_serversentevents.asp http://javascript.ruanyifeng.com/htmlap ...

  9. 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项

    ------- android培训.java培训.期待与您交流! ---------- 首先来看一段代码: Integer x = new Integer(4); Integer y = 4; 在JD ...

  10. 【开发环境】JAVA 环境变量批处理

    @echo off set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environmen ...