linux下c编程socket通信
来源:互联网 发布:java volatile 原子性 编辑:程序博客网 时间:2024/06/05 04:29
1、服务器端
建立socket。int sockfd = socket(AF_FAMILY,SOCK_STREAM,0);
绑定IP和端口。bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
开启listen。listen(sockfd,5);
循环accept。int newfd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size);
读写数据。read(newfd,buf,bufsize); write(newfd,buf,sizeof(buf));
>>注意绿色部分,最后一个参数的区别<<
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>int main(){int sockfd,sin_size,newfd;struct sockaddr_in serveraddr,clientaddr;char databuf[1024];//create server socketif((sockfd=socket(AF_INET,SOCK_STREAM,0)) == 0)exit(0);//bind ip and portserveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(9999);serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(sockfd,(struct sockaddr *)&serveraddr,sizeof(struct sockaddr)) == -1)exit(0);//listenif(listen(sockfd,5) == -1)exit(0);//acceptwhile(1){sin_size = sizeof(struct sockaddr_in);if((newfd=accept(sockfd,(struct sockaddr *)&clientaddr,&sin_size)) == -1)exit(0);//read dataread(newfd,databuf,1024);//write datawrite(newfd,databuf,strlen(databuf));}return 0;}
2、客户端
建立socket。int sockfd = socket(AF_FAMILY,SOCK_STREAM,0);
指定服务器IP和端口。
连接服务器。connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
收发数据。
>>注意绿色部分与服务器端accept和bind的异同<<
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>int main(){struct sockaddr_in saddr,caddr;int sockfd;char databuf[1024];//create socketif((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)exit(0);//init server ip and portsaddr.sin_family = AF_INET;saddr.sin_port = htons(9999);saddr.sin_addr.s_addr = inet_addr("127.0.0.1");//connectif(connect(sockfd,(struct sockaddr *)(&saddr),sizeof(struct sockaddr)) == -1)exit(0);write(sockfd,"i am client",11);read(sockfd,databuf,1024);printf("%s\n",databuf);return 0;}
3、头文件解释
htons()、htonl()函数出自netinet.h。
inet_addr()函数出自arpa/inet.h。
read()、write()函数出自unistd.h。
struct sockaddr_in、struct sockaddr出自sys/socket.h。
0 0
- linux下c编程socket通信
- Linux下TCP网络编程与基于Windows下C#Socket编程间通信
- linux下socket c 编程
- linux 下socket编程 一对一阻塞通信
- Linux下C编程 -- Socket编程
- Linux环境下的c语言socket编程实现交互通信
- linux socket 通信编程
- linux socket通信编程
- linux c socket通信
- Linux C下socket编程API简介
- Linux下C语言socket编程
- Linux下C语言socket编程
- linux下 socket编程(基于c)
- Linux下C语言socket网络编程
- Linux下C语言Socket编程
- linux下C语言 socket tcp编程
- Linux下C编程 进程通信 (IPC)
- 嵌入式linux下socket网络通信编程实例一
- Java中的向上类型转换和向下类型转换
- Android开发--Intent-filter属性详解
- 叠式的常规性转行分拆规则
- 欢迎使用CSDN-markdown编辑器
- hdu3355 Bomb
- linux下c编程socket通信
- MyeclipseTFS团队资源管理器插件
- Android 开发最佳实践
- 设计模式总
- Bigger多宝格 技术及介绍文档
- Linux下安装Tomcat服务器和部署Web应用
- avro
- CString转换成char*的最佳方案
- 【HUSTOJ】1009: 较大的数