socket编程(三)---- 简单的客户端
2016-03-21 21:13
218 查看
socket编程(三)---- 简单的客户端
1. socket客户端函数描述
我们从上一篇文章的通信流程图中可以看出,客户端和服务端所有的函数基本一致,就只有一个用于建立连接的connect函数不同,下面我们来看看这个函数。
connect()
客户端与服务器端建立连接
sockfd:套接字描述符
addr:客户端的地址信息结构体
addrlen:上述结构体的大小
如果建立键连接成功,返回0,失败返回-1
2. 搭建一个简单的客户端
1. socket客户端函数描述
我们从上一篇文章的通信流程图中可以看出,客户端和服务端所有的函数基本一致,就只有一个用于建立连接的connect函数不同,下面我们来看看这个函数。
connect()
#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
客户端与服务器端建立连接
sockfd:套接字描述符
addr:客户端的地址信息结构体
addrlen:上述结构体的大小
如果建立键连接成功,返回0,失败返回-1
2. 搭建一个简单的客户端
#include<stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <errno.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> int main() { int sockfd = 0; int ret = -1; sockfd = socket(AF_INET, SOCK_STREAM, 0); if(-1 == sockfd) { perror("func socket() error!"); return 0; } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(4444); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if( -1 == connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) ) { perror("func connect() error!"); return 0; } char buff[100]; memset(buff, 0, sizeof(buff)); scanf("%s", buff); ret = write(sockfd, buff, strlen(buff)); /* 发送数据,Linux上一切设备皆文件,顾所有的操作都能以文件的形式完成,成功返回发送的长度 */ if(ret < 0) { perror("func write() error!"); } ret = recv(sockfd, buff, sizeof(buff), 0); /* 接收数据,返回接收的数据长度,等于0表示对方已关闭 */ if(ret < 0) { perror("func recv() error!"); close(sockfd); return 0; } else if(0 == ret) { printf("peer has closed.\n"); close(sockfd); return 0; } else printf("recv: %s\n", buff); close(sockfd); return 0; }
相关文章推荐
- matlab:reshape
- SpringMVC与Struts2的对比
- struts2拦截器的实现原理及源码剖析
- Java中“final”关键字
- C语言中的堆排序是什么样子的过程
- Java类的加载顺序
- android(eclipse)广播机制知识梳理(三)
- java语言程序设计第十版(Introduce to java 10th) 课后习题 chapter6-30
- java类初始化的过程
- ThinkPHP的eq标签
- c++第2次上机作业
- 框架学习:webWork框架和struts2框架的结构和分析
- Java编程学习——访问权限
- C++中istringstream、ostringstream、stringstream 的用法
- C#程序解读
- 框架学习:struts1框架的结构和分析
- C++中“强制转换”的四大天王
- Java之多线程断点下载的实现
- PHP 版本 支付
- C/C++ 之 异常处理机制核心观点