本示例为 Client/Server 结构,通过代码演示 Client 如何建立连接,并向远程端发送数据;Server 端如何侦听系统连接请求,接收请求并建立连接,进而获取客户端发来的数据。代码虽短,却描述了整个通信过程,可对Linux 下 网络编程起个抛砖引玉的作用吧 :-)

Client 端代码:
--------------------------------------------------------------
/* sockclnt.c*/
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /*for struct sockaddr_in*/

#define DEST_IP   "65.52.207.217"
#define DEST_PORT 4000

int main()
{
  int res;
  int sockfd;
  struct sockaddr_in dest_addr;

char *msg = "Hello world\n";
  int len, bytes_sent;

/* 取得一个套接字*/
  sockfd = socket(AF_INET, SOCK_STREAM, 0);
  if (sockfd == -1) {
    perror("socket()");
    exit(1);
  }

/* 设置远程连接的信息*/
  dest_addr.sin_family = AF_INET;                 /* 注意主机字节顺序*/
  dest_addr.sin_port = htons(DEST_PORT);          /* 远程连接端口, 注意网络字节顺序*/
  dest_addr.sin_addr.s_addr = inet_addr(DEST_IP); /* 远程 IP 地址, inet_addr() 会返回网络字节顺序*/
  bzero(&(dest_addr.sin_zero), 8);                /* 其余结构须置 0*/

/* 连接远程主机,出错返回 -1*/
  res = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr_in));
  if (res == -1) {
    perror("connect()");
    exit(1);
  }

len = strlen(msg);
  bytes_sent = send(sockfd, /* 连接描述符*/
                    msg,    /* 发送内容*/
                    len,    /* 发关内容长度*/
                    0);     /* 发送标记, 一般置 0*/

/* 关闭连接*/
  close(sockfd);
}

Server 端的代码:
-----------------------------------------------------------------------------------------
/* socksrv.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /* for struct sockaddr_in*/

#define BACKLOG 10
#define MYPORT  4000

int main()
{
  char *addr;
  int sockfd;
  int new_fd;
  struct sockaddr_in my_addr, their_addr;

int res;
  int sin_size;

char *buf;
  /* 取得套接字描述符*/
  sockfd = socket(AF_INET,     /* domain*/
                  SOCK_STREAM, /* type*/
                  0);          /* protocol*/

if (sockfd == -1) {
    perror("socket");
    exit(1);
  }

/* Init sockaddr_in */
  my_addr.sin_family = AF_INET;                /* 注意: 应使用主机字节顺序*/
  my_addr.sin_port = htons(MYPORT);            /* 注意: 应使用网络字节顺序*/
  my_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* 使用自己的 IP 地址 */
  bzero(&(my_addr.sin_zero), 8);               /* 结构的其余的部分须置 0*/

/* 指定一个套接字使用的地址及端口*/
  res = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));
  if (res == -1) {
    perror("bind");
    exit(1);
  }

/* 监听请求, 等待连接*/
  res = listen(sockfd,
               BACKLOG);  /* 未经处理的连接请求队列可容纳的最大数目*/               
  if (res == -1) {
    perror("listen");
    exit(1);
  }

/* 接受对方的连接请求, 建立连接,返回一个新的连接描述符.
   * 而第一个套接字描述符仍在你的机器上原来的端口 listen()
   */
  sin_size = sizeof(struct sockaddr_in);
  new_fd = accept(sockfd, (void *)&their_addr, &sin_size);

buf = (char *)malloc(255);
  if (buf == NULL) {
    printf("malloc failed\n");
    exit(1);
  }

/* 接受对方发来的数据*/
  res = recv(new_fd, buf, 255, 0);
  if (res == -1) {
    perror("recv()");
    exit(1);
  }

/* 关闭本次连接*/
  close(new_fd);

/* 关闭系统监听*/
  close(sockfd);

printf("recv data:%s\n", buf);
  free(buf);
  return 0;
}

编译:
------------------------------------------------
gcc -o sockclnt sockclnt.c
gcc -o socksrv  socksrv.c

转载于:https://www.cnblogs.com/zhangzhang/archive/2012/03/29/2422933.html

[zz]Linux 下 socket 编程示例相关推荐

  1. Linux下Socket编程

    Linux下Socket编程    网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...

  2. 一文了解linux下socket编程

    一文了解linux下socket编程 文章目录 一文了解linux下socket编程 1 网络编程的相关简述 1.1 引言 1.2 Tcp和Udp简介 1.3 TCP三次握手和四次挥手 1.4 网络编 ...

  3. LINUX下Socket编程 函数格式详解

    你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...

  4. linux下socket编程读写函数

    linux下socket编程,实现服务器与客户端的通信之后,在同一个虚拟机上,打开两个shell,一个运行服务器程序,一个运行客户端程序,课相互发送数据. 如果使用的是recv接收函数,当关闭客户端或 ...

  5. linux下socket编程中setsockopt的作用

    如题所示,在linux进行socket编程的时候,一般而言,socket,bind,listen三步曲之后,就开始接收客户端请求,然后实现收发数据. 如下所示的代码,是没有setsockopt的情况: ...

  6. linux socket 结构定义 send,Linux下Socket编程中用send发送结构体

    Linux网络通信 Linux下多客户端聊天软件 最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下 ...

  7. C++服务器(一):了解Linux下socket编程

    最近想要用C++写个socket的服务器,用于日常的项目开发. 不过,我是新手,那就慢慢地学习一下吧. 首先,先写一段程序,用起来先. 感谢博文: Linux下 C++调用C 实现socket网络通讯 ...

  8. 【Linux】Linux 下socket 编程

    TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制协议(TCP)和网际协议(IP),但是实际上是一组协议,包含ICMP, RIP, TELENET, FTP, SMT ...

  9. Linux下Socket编程中用send发送结构体

    转自:http://tech.ddvip.com/2008-10/122543769687623.html Linux网络通信 Linux下多客户端聊天软件 Linux程序设计 Linux socke ...

最新文章

  1. 编程题:两个数比较大小,之后用变量t互换。
  2. 直接拿来用!最火的Android开源项目(完结篇)
  3. Acwing第 14 场周赛【完结】
  4. create-react-app应用的入口定义
  5. android gps 锁屏更新坐标_MIUI内测版更新日志解析,以及动画解说!
  6. Python缩进问题
  7. RxJava:从未来到可观察
  8. 修改WordPress中上传附件2M大小限制的方法
  9. 转载:JAVA获取时间戳,哪个更快
  10. Ubuntu 安装 Linux Deepin 截图工具(.deb)
  11. 开发者说丨如何从零开始构建一个轻量级应用
  12. Memcached学习---(2)Linux Memcached 安装
  13. 如何轻松使用 C 语言实现一个栈?​
  14. 自定义协议_面试官:Netty如何实现自定义协议?尽量详细点
  15. 技术寡头争霸传之:控制开源工具,就控制了整个生态
  16. Install Debian (Etch/testing) in a USB stick 在U 盘中安装 Debian(Etch/testing)(
  17. 学术论文投稿第五弹——如何写Discussion
  18. openstack glance-api-paster
  19. 【计算机组成原理】实验1: 基本逻辑单元实验
  20. php path separator,php DIRECTORY_SEPARATOR常量介绍

热门文章

  1. python下载了怎么打开-下载python后如何启动
  2. python的优点和缺点-Python语言的优缺点,你知道吗?
  3. 学python的主流就业方向-Python有哪些就业方向 你知道Python的优势吗
  4. python装饰器-python中的装饰器常用于哪些应用场景
  5. python3教程-终于清楚python3详细教程
  6. python用中文怎么说-python如何设置中文界面
  7. python3.5怎么使用-Python3.5常见内置方法参数用法实例详解
  8. python九九乘法口诀表-python打出九九乘法口诀表
  9. python切片语法-详解Python 切片语法
  10. python开发需要掌握哪些知识-Python基础学习需要掌握哪些知识