socket编程

socket函数

/*创建一个socket*/
int socket(int family,int type,int protocol)

family: 指定使用的协议簇:AF_INET(IPv4) AF_INET6(IPv6) AF_LOCAL(UNIX协议) AF_ROUTE(路由套接字) AF_KEY(秘钥套接字)
type:指定使用的套接字的类型:SOCK_STREAM(字节流套接字) SOCK_DGRAM
protocol:如果套接字类型不是原始套接字,那么这个参数就为0

bind函数

/*捆绑socket与一个本地地址*/
int bind(int sockfd, struct sockaddr *myaddr, int addrlen)

sockfd: socket函数返回的套接字描述符
sockaddr:
struct sockaddr{
unsigned short sa_family; //通信协议类型族AF_xx
char sa_data[14]; //14字节协议地址,包含该socket的IP地址和端口号
};
addrlen: 结构sockaddr的长度

connect函数

//连接服务器操作
int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen)

listen函数

//监听客户端的请求
int listen(int sockfd, int backlog)

sockfd:socket函数绑定bind后套接字描述符
backlog:设置可连接客户端的最大连接个数,当有多个客户端向服务器请求时,收到此值的影响。默认值20

accept函数

//接受一个client连接
int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen)

收发数据——除read/write之外)

int send(int sockfd, const void *msg,int len,int flags)
int recv(int sockfd, void *buf,int len,unsigned int flags)

socket实现demo
server.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>int main(int argc, char *argv[])
{int fd, new_fd, struct_len, numbytes,i;struct sockaddr_in server_addr;struct sockaddr_in client_addr;char buff[BUFSIZ];server_addr.sin_family = AF_INET;          //ipv4协议server_addr.sin_port = htons(8000);            //8000端口server_addr.sin_addr.s_addr = INADDR_ANY;  //本机所有的IPbzero(&(server_addr.sin_zero), 8);         //填充位struct_len = sizeof(struct sockaddr_in);/* 创建一个socket */fd = socket(AF_INET, SOCK_STREAM, 0);/* 本机的socket绑定 */while(bind(fd, (struct sockaddr *)&server_addr, struct_len) == -1);/* 对socket进行监听 */while(listen(fd, 10) == -1);printf("Ready for Accept,Waitting...\n");/* 接受客户端的请求 */new_fd = accept(fd, (struct sockaddr *)&client_addr, &struct_len);printf("Get the Client.\n");/* 发送数据给客户端 */numbytes = send(new_fd,"Welcome to my server\n",21,0);/* 循环收发数据 */while((numbytes = recv(new_fd, buff, BUFSIZ, 0)) > 0){buff[numbytes] = '\0';printf("%s\n",buff);if(send(new_fd,buff,numbytes,0)<0){perror("write");return 1;}}close(new_fd);close(fd);return 0;
}

client.c

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>int main(int argc,char *argv[])
{int sockfd,numbytes;char buf[BUFSIZ];struct sockaddr_in their_addr;/* 创建一个socket */sockfd = socket(AF_INET,SOCK_STREAM,0);their_addr.sin_family = AF_INET;their_addr.sin_port = htons(8000);their_addr.sin_addr.s_addr=inet_addr("127.0.0.1");bzero(&(their_addr.sin_zero), 8);/* 连接服务器请求 */while(connect(sockfd,(struct sockaddr*)&their_addr,sizeof(struct sockaddr)) == -1);/* 接收服务器数据 */numbytes = recv(sockfd, buf, BUFSIZ,0);buf[numbytes]='\0';  printf("%s",buf);/* 循环收发数据 */while(1){printf("Entersome thing:");scanf("%s",buf);numbytes = send(sockfd, buf, strlen(buf), 0);numbytes=recv(sockfd,buf,BUFSIZ,0);  buf[numbytes]='\0'; printf("received:%s\n",buf);  }close(sockfd);return 0;
}

c语言——socket编程相关推荐

  1. c语言soket编程,C语言socket编程使用方法

    C语言socket编程使用方法 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.以 ...

  2. C语言SOCKET编程指南

    转载自:http://blog.sina.com.cn/s/blog_79b01f66010163q3.html 这篇文章完全可以作为c语言socket编程指南,无论在任何系统下.感谢作者fenglo ...

  3. go语言socket编程

    go语言socket编程 用go写socket非常简单,如果你了解其他语言的socket的话一看便知,如果想深入的话,个人建议看uninx网络编程套接字联网API这本书. 在go中,网络协议被封装的非 ...

  4. 钻星图的c语言的编程,C 语言Socket编程教程 pdf

    南漳谬悠情节层析德雅青豆丹佛脉理密封.夺理秋月弹流清切壳菜夺得沙梨.临朐硕壮着迷僚婿母权欣欣气急波器,倒把迟迟供肥东辽电学片盘挂钟劈胸麦片!龙乡足板比美性病内屏:涣然树立马具闹哄啪唧每场水力儒艮: 励 ...

  5. 【go语言 socket编程系列】net.DialTCP、net.DIalUDP与net.Dial

    [函数原型] func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error)  func DialUDP(network s ...

  6. C语言 socket编程实例

    C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...

  7. C语言Socket编程为什么要将sockaddr_in强制转换成sockaddr?

    在阅读尹圣雨<TCP/IP网络编程>(C语言示例)的时候,看到将sockaddr_in类型的struct的指针强制转换成了sockaddr类型的指针. 比如hello_client.c: ...

  8. linux C语言 socket编程教程(附两个例子)(socket教程)

    文章目录 1.网络中进程之间如何通信? 2.什么是Socket? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 网络字节序与主机字节序 3.3.listen(). ...

  9. C语言socket编程中关于read()和write()的思考

    最近开始学习C的socket编程,教材上有一处依照我对IO函数的理解,我感觉有点问题,故而研究了一下.学的很浅,可能有错漏. 1.socket编程中read()和write()内部原理 每个socke ...

  10. c语言socket教学视频,C语言—— socket编程

    前不久刚看完<c primer plus>,收获颇丰,对于C语言也有了更全面的认识,对于模块化和数据结构也有了更多的想法,之前学过C语言,但很多已经记不起了,知识很零散,这也是我看这本书的 ...

最新文章

  1. 又现“别人家的公司”!网曝腾讯和快手发“阳光普照奖”,给每个员工100股股票!...
  2. OPENCV裁剪图片
  3. MapReduce进阶:多路径输入输出
  4. 元组-元组变量的循环遍历
  5. edit plus 中文插件_iMindMap手绘思维导图软件中文版
  6. “天才”少年!4位90后摘得全球顶尖数学大奖,90%获奖者不满30岁
  7. mysql练习(重)
  8. .net pdf转图片_pdf转图片怎么转?看了就知道啦!
  9. android app 检测是否开启了开发者模式
  10. Linux编译移植Qt5的环境_OMAPL138平台
  11. BootStrap左侧菜单栏
  12. linux卸载lightdm,Ubuntu安装LightDM
  13. 2022人才市场洞察及薪酬指南
  14. 1.Redis面试宝典
  15. GloVe最全面、最深度的解析
  16. 简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)
  17. guava ratelimiter限流(1)
  18. Yslow安装使用, 网站性能工具Yslow
  19. neo4j基础系列教程
  20. 几种均线实用的选股_henry_dx_新浪博客

热门文章

  1. 游戏开发商是如何做到每日进帐410万美元的?
  2. gitlab服务: kex_exchange_identification: Connection closed by remote host
  3. geopandas read_file报错RTreeError: Coordinates must be in the form (minx,
  4. PMP/高项 项目范围管理实践
  5. Pro 了,更强了 — 米家台灯 Pro 评测
  6. Dart 实现字符串 进行 gbk编码的 urlencode
  7. 糖友日常生活需要注意什么
  8. 2020年国内外值得关注的15家PaaS平台与SaaS厂商!
  9. 智能工厂具体的名词解释
  10. STM32使用外部中断控制led灯亮灭