一.背景

好久没有进行linux下的socket编程了,复习一下

二.服务端完整代码

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/wait.h>

#include <netinet/in.h>

#include <unistd.h>

#define PORT (9000)

#define MAX_BACKLOG (5)

#define SEND_CONTENT "hello,jello"

void main(void){

  int listenfd,new_fd;

  struct sockaddr_in myaddr;

  

  listenfd = socket(AF_INET,SOCK_STREAM,0);

  memset(&myaddr,0,sizeof(myaddr));

  myaddr.sin_family = AF_INET;

  myaddr.sin_port = htons(PORT);

  myaddr.sin_addr.s_addr = htonl(INADDR_ANY);

  

  bind(listenfd,(struct sockaddr*)&myaddr,sizeof(struct sockaddr));

  listen(listenfd,MAX_BACKLOG);

  while(1){  

    new_fd = accept(listenf,(struct sockaddr*)NULL,NULL);

    send(new_fd,SEND_CONTENT,strlen(SEND_CONTENT),0)

    usleep(1);

    close(new_fd);  

  }

  close(listenfd);

}

三.客户端完整代码

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/wait.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#define PORT (9000)

#define SERVER_IP "127.0.0.1"

#define BUFF_SIZE (100)

void main(void){

  int fd,num;

  struct sockaddr_in server_addr;

  char buff[BUFF_SIZE] = {0};

  fd = socket(AF_INET,SOCK_STREAM,0);

  memset(&server_addr,0,sizeof(server_addr));

  server_addr.sin_family = AF_INET;

  server_addr.sin_port = htons(PORT);

  inet_pton(AF_INET,SERVER_IP,&server_addr.sin_addr);

  connect(fd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));

  num = recv(fd,buff,sizeof(buff),0);

  buff[num] = '\0';

  printf("buff = %s,num = %d\n",buff,n);

  close(fd);

}

四.编译及运行

gcc server.c -o server

gcc client.c -o client

./server &

./client

linux的最简socket编程的更多相关文章

  1. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  2. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  3. Linux下的C Socket编程 -- 获取对方IP地址

    Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...

  4. Linux下的C Socket编程 -- 简介与client端的处理

    Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...

  5. ZT Linux系统环境下的Socket编程详细解析

    Linux系统环境下的Socket编程详细解析 来自: http://blog.163.com/jiangh_1982/blog/static/121950520082881457775/ 什么是So ...

  6. linux网络编程之socket编程(一)

    今天开始,继续来学习linux编程,这次主要是研究下linux下的网络编程,而网络编程中最基本的需从socket编程开始,下面正式开始学习: 什么是socket: 在学习套接口之前,先要回顾一下Tcp ...

  7. linux网络编程之socket编程(十六)

    继续学习socket编程,今天的内容会有些难以理解,一步步来分解,也就不难了,正入正题: 实际上sockpair有点像之前linux系统编程中学习的pipe匿名管道,匿名管道它是半双工的,只能用于亲缘 ...

  8. linux网络编程之socket编程(十五)

    今天继续学习socket编程,这次主要是学习UNIX域协议相关的知识,下面开始: [有个大概的认识,它是来干嘛的] ①.UNIX域套接字与TCP套接字相比较,在同一台主机的传输速度前者是后者的两倍. ...

  9. linux网络编程之socket编程(三)

    今天继续对socket编程进行学习,在学习之前,需要回顾一下上一篇中编写的回射客户/服务器程序(http://www.cnblogs.com/webor2006/p/3923254.html),因为今 ...

随机推荐

  1. 【SQL server】SQL server基础(一)

    一.关系型数据库 关系型数据库的基本元素是二维表,这些二维表可以被独立或者通过join语句连接起来使用.主键和外键是用来连接二维表之间的主要工具 1.主键(primary key)和外键(foreig ...

  2. Image Processing and Analysis_8_Edge Detection:Design of steerable filters for feature detection using canny-like criteria ——2004

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  3. Linux命令——diff、patch

    简介 diff以行为单位比较不同ASCII文件差异,可以输出一组指令,用于指导如何更改一个文件使其与第二个文件相同.diff在软件开发时多用于比较新旧版本代码,和patch连用可以将文件间区别做成补丁 ...

  4. NoNodeAvailableException[None of the configured nodes are available:

    elasticSearch的错误 NoNodeAvailableException[None of the configured nodes are available: [{#transport#- ...

  5. 12.自定义v-过渡动画前缀

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  6. sh make.sh fatal error: opencv2/opencv.hpp: No such file or directory

    问题: sh make.sh fatal error: opencv2/opencv.hpp: No such file or directory 解决: sudo apt-get install l ...

  7. Vue 循环 [Vue warn]: Avoid using non-primitive value as key

    页面中不添加  :key 索引的时候,会不停的提示虚线,但不影响使用 后来加了一个索引,加成了:key= "content" 从后台取出来的contents是一个list,里面有多 ...

  8. Ubuntu系统---C++之Eclipse IDE 编译器安装

    Ubuntu系统---C++之Eclipse IDE 编译器安装 Eclipse是一个基于Java的.开放源码的.可扩展的应用开发平台,它为编程人员提供了一流的Java集成开发环境(Integrate ...

  9. Kostya the Sculptor(贪心

    这题本来  想二分.想了很久很久,解决不了排序和二分的冲突.     用贪心吧.. 题意: 给你n个长方形,让你找出2个或1个长方体,使得他们拼接成的长方体的内接球半径最大(这是要求最短边越大越好)( ...

  10. Robot Framework--运行pybot时出错

    1.在Execution Profile中选择 pybot,点击 start,报错,找不到指定文件 2.在cmd中运行pybot.bat也是报错---pybot is not define 3.找到p ...