C语言socket通信实例

阅读: 评论:0

C语言socket通信实例

C语言socket通信实例


1.简要分析:

        socket分为服务端和客户端:

            .服务端监听端口发来的请求,收到后向客户端回应数据。

            .客户端负责发送消息。

2.创建步骤:

        服务器:建立socket,绑定socket和地址信息,开启监听,收发数据。

        客户端:建立socket,连接服务器端,收发数据。

下面我们以TCP通信为例:
/************************ client ****************************************/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MAXLIN 4096int main(int argc,char **argv)
{int sockfd,rec_len;//句柄char sendline[4096];char buf[MAXLIN];struct sockaddr_in servaddr;//地址信息结构体if(argc!=2){printf("usage:./client <ipaddress>n");exit(0);}if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)//(协议族/域,协议类型,协议编号){printf("create socket error:%s(error:%d)n",strerror(errno),errno);exit(0);}memset(&servaddr,0,sizeof(servaddr));servaddr.sin_family=AF_INET;/* 该属性表示接收本机或其它机器传输 */servaddr.sin_port=htons(8000);/* 端口号 */if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0){printf("inet_pton error for %sn",argv[1]);exit(0);}if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0){printf("connect error:%s(errno:%d)n",strerror(errno),errno);exit(0);}printf("send msg to server:n");fgets(sendline,4096,stdin);if(!fork()){if(send(sockfd,sendline,strlen(sendline),0)<0){printf("send msg error :%s(errno:%d)n",strerror(errno),errno);exit(0);}}if((rec_len=recv(sockfd,buf,MAXLIN,0))==-1){perror("recv errorn");exit(1);}buf[rec_len]='';printf("Received:%s",buf);close(sockfd);return 0;
}/************************ client end ****************************************//************************ server start ****************************************/#include <stdio.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define DEFAULT_PORT 8000
#define MAXLIN 4096int main(int argc,char **argv)
{int socket_fd,connect_fd;struct sockaddr_in servaddr;char buff[4096];int n;//初始化if((socket_fd=socket(AF_INET,SOCK_STREAM,0))==-1){printf("create socket error:%s(errno :%d)n",strerror(errno),errno);exit(0);}memset(&servaddr,0,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址servaddr.sin_port=htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT//将本地地址绑定到所创建的套接字上if(bind(socket_fd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1){printf("bind socket error:%s(errno:%d)n",strerror(errno),errno);exit(0);}//开始监听是否有客户端连接,第二个参数是最大监听数if(listen(socket_fd,10)==-1){printf("listen socket error:%s(errno:%d)n",strerror(errno),errno);exit(0);}printf("======waiting for client's request=====n");while(1){if((connect_fd=accept(socket_fd,(struct sockaddr*)NULL,NULL))==-1){printf("accept socket error :%s(errno:%d)n",strerror(errno),errno);continue;}n=recv(connect_fd,buff,MAXLIN,0);if(!fork()){if(send(connect_fd,"hello mann",26,0)==-1)perror("send error");close(connect_fd);exit(0);}buff[n]='n';printf("recv client : %sn",buff);close(connect_fd);}close(socket_fd);
}/************************ server end ****************************************/


本文发布于:2024-02-02 09:49:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170683855742995.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实例   语言   通信   socket
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23