Linux 网络编程 简单例程1
来源:互联网 发布:数据库排序 编辑:程序博客网 时间:2024/06/08 05:37
目的:编写简单的服务器到客户端通信小程序。
1. 服务端代码
/************ * servise.c 服务端程序源码 */#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <linux/in.h>#define PORT 8885#define BACKLOG 2int main(int argc, char *argv[]){int ss, sc;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int err;pid_t pid;ss = socket(AF_INET, SOCK_STREAM, 0);if (ss < 0){perror("socket error!");return -1;}bzero(&server_addr, sizeof(server_addr)); // 清零server_addr.sin_family=AF_INET; // 指定协议server_addr.sin_addr.s_addr=htonl(INADDR_ANY); // htonl() 函数 主机到网络字节序转换 指定地址为INADDR_ANYserver_addr.sin_port = htons(PORT); // 指定端口号err = bind(ss, (struct sockaddr *)&server_addr, sizeof(server_addr)); // 绑定套接字 强制类型转换 sockaddr_in -> sockaddrif (err < 0){printf("listen error!\n");return -1;}err = listen(ss, BACKLOG); // 启动监听 if (err < 0){printf("listen error!\n");return -1;}for(;;) {int addrlen = sizeof(struct sockaddr);sc = accept(ss, (struct sockaddr*)&client_addr, &addrlen); //接受客户端连接if (sc < 0){continue;}pid=fork();if (pid == 0){close(ss);process_conn_server(sc); // 服务端处理函数}else{close(sc);}}}
2. 客户端代码
#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <linux/in.h>#define PORT 8885int main(int argc, char *argv[]){int s;struct sockaddr_in server_addr;int err;s = socket(AF_INET, SOCK_STREAM, 0);if (s < 0){printf("socket error!\n");return -1;}bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(PORT);inet_pton(AF_INET, argv[1], &server_addr.sin_addr); // inet_pton() 字符串格式转换到2进制connect(s, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); // 建立连接process_conn_client(s); // 客户端处理程序close(s);}
3. 处理程序
#include <stdio.h>#include <string.h>void process_conn_server(int s){ssize_t size = 0;char buffer[1024];for(;;) {size = read(s, buffer, 1024);if (size == 0){return ;}sprintf(buffer, "%d bytes altogether\n", size);write(s, buffer, strlen(buffer)+1);}}void process_conn_client(int s){ssize_t size = 0;char buffer[1024];for(;;){size = read(0, buffer, 1024);if (size > 0){write(s, buffer, size);size = read(s, buffer, 1024);write(1, buffer, size);}}}
- Linux 网络编程 简单例程1
- UDP网络编程例程1
- java例程练习(网络编程[简单网络连接试验])
- java例程练习(网络编程[简单双向通信试验])
- java例程练习(网络编程[简单UDP通信试验])
- 【unix网络编程】第一章简单的时间获取例程
- 简单linux网络编程
- jni 编程简单例程
- Linux网络编程echo简单示例1
- linux下简单网络编程
- Linux 网络编程 简单实例
- linux 网络编程简单实例
- Linux 网络编程 简单实例
- Linux网络编程简单示例
- Linux网络编程简单示例
- Linux网络编程简单示例
- linux简单的网络编程
- python 串行编程简单例程
- 内存中数据如何分配
- HDU 1052 Tian Ji -- The Horse Racing
- hdu 1254推箱子(两次bfs)
- javascript面向对象(属性和方法应注意的问题)
- 关于由结构体首地址算其内部的一些变量时所用的偏移和CONTAINING_RECORD宏
- Linux 网络编程 简单例程1
- uva 10029 - Edit Step Ladders(dp + 二分)
- C#实现抽奖程序(1)
- 文章
- ACM POJ 3020 Antenna Placement 二分匹配
- 第二章
- 用递归计算C(m,n)
- 分桶法和平方分割(对区间的操作)
- Ajax的工作原理