客户端向服务器发送普通数据和紧急数据的实例
2015-10-29 21:04
218 查看
/************************************************************************* > File Name: client.c > Author: yxk > Mail: > Created Time: 2015年10月29日 星期四 20时23分35秒 ************************************************************************/ #include <stdio.h> #include <netinet/in.h> #include <sys/socket.h> #include <arpa/inet.h> #include <assert.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int main(int argc, char ** argv) { if (argc <= 2){ printf("argc is less than 3"); exit(1); } const char * ip = argv[1]; int port = atoi(argv[2]); struct sockaddr_in server_address; bzero(&server_address, sizeof(server_address)); server_address.sin_family = AF_INET; inet_pton(AF_INET, ip, &server_address.sin_addr); server_address.sin_port = htons(port); int sockfd = socket(AF_INET, SOCK_STREAM, 0); assert(sockfd >= 0); if(connect(sockfd, (struct sockaddr *)&server_address, sizeof(server_address)) < 0){ printf("connection failed\n"); } else{ const char * oob_data = "abc"; const char * normal_data = "123"; send(sockfd, normal_data, strlen(normal_data), 0); send(sockfd, oob_data, strlen(oob_data), MSG_OOB); send(sockfd, normal_data, strlen(normal_data), 0); } close(sockfd); exit(0); }
/************************************************************************* > File Name: server.c > Author: yxk > Mail: > Created Time: 2015年10月29日 星期四 20时33分31秒 ************************************************************************/ #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <string.h> #define BUF_SIZE 1024 int main(int argc, char ** argv) { if (argc <= 2){ printf("argc is less than 3"); exit(EXIT_FAILURE); } const char *ip = argv[1]; int port = atoi(argv[2]); struct sockaddr_in address; bzero(&address, sizeof(address)); address.sin_family = AF_INET; inet_pton(AF_INET, ip, &address.sin_addr); address.sin_port = htons(port); int sock = socket(AF_INET, SOCK_STREAM, 0); assert(sock >= 0); int ret = bind(sock, (struct sockaddr *)&address, sizeof(address)); assert(ret != -1); ret = listen(sock, 5); assert(ret != -1); struct sockaddr_in client; int client_addrlen = sizeof(client); int connfd = accept(sock, (struct sockaddr *)&client, &client_addrlen); if (connfd < 0) printf("connfd error.\n"); else{ char buffer[BUF_SIZE]; memset(buffer, '\0', BUF_SIZE); ret = recv(connfd, buffer, BUF_SIZE-1, 0); printf("got %d bytes of ormal data %s.\n", ret, buffer); memset(buffer, '\0', BUF_SIZE); ret = recv(connfd, buffer, BUF_SIZE-1, MSG_OOB); printf("got %d bytes of oob data %s.\n", ret, buffer); memset(buffer, '\0', BUF_SIZE); ret = recv(connfd, buffer, BUF_SIZE-1, 0); printf("got %d bytes of ormal data %s.\n", ret, buffer); close(connfd); } close(sock); exit(EXIT_SUCCESS); }
相关文章推荐
- 结构体+模版
- Linux platform驱动代码编写
- 黑马程序员-集合框架
- pip install mysql-python fails with EnvironmentError: mysql_config not found
- LightOJ 1433 - Minimum Arc Distance
- ——黑马程序员——C语言中程序结构(二)
- 视频播放器常用方法
- ORACLE冷备份及恢复
- java流程控制语句(上)
- Android进程间通信--消息机制及IPC机制实现
- 对测试用例的理解
- code blocks 无法运行
- ios应用数据存储方式(偏好设置)
- 51nod 1163 最高的奖励 (贪心+STL)
- matlab写入/合成视频VideoWriter类
- 基于特性验证(完结)
- vue model双向绑定
- gdb寻找死锁
- mvc 中Empty和Internet Application
- postgresql之dblink