单个服务器和客户端的通信
来源:互联网 发布:天通银交易软件 编辑:程序博客网 时间:2024/05/01 21:38
创建一个客户端,一个服务器。
要求:客户端传小写字母给服务器,服务器接收后转换成大写字母回传给客户端。
要求:客户端传小写字母给服务器,服务器接收后转换成大写字母回传给客户端。
效果:客户端处循环输入一个字母,返回一个大写字母。(可以添加说明printf()输入为 / 转换后输出为)
/*********************************************************************File Name: tcp_net_socket.hAuthor: date:Description: Fuction List:********************************************************************/#ifndef _TCP_NET_SOCKET_H#define _TCP_NET_SOCKET_H#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <stdlib.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <signal.h>#define SERV_PORT 9000extern int tcp_init();extern int tcp_accept(int sfd);extern int tcp_connet();extern void signalhandler(void);#endif
/*********************************************************************File Name: tcp_net_socket.cAuthor: date:Description: Fuction List:int tcp_init() //用于初始化操作int tcp_accept(int sfd)//用于服务器的接收int tcp_connect(const char* ip)//用于客户端的连接void signalhandler(void)//用于信号处理,让服务器在按下Ctrl+c或Ctrl+\时不会退出********************************************************************/#include "tcp_net_socket.h"//用于初始化操作int tcp_init() {int sfd = socket(AF_INET, SOCK_STREAM, 0); //创建套接字if(sfd == -1){perror("socket");return -1;}int ret;struct sockaddr_in serveraddr;memset(&serveraddr,0,sizeof(struct sockaddr));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(SERV_PORT);serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);ret = bind(sfd, (struct sockaddr*)&serveraddr, sizeof(struct sockaddr));if(ret == -1){perror("bind");return -1;}ret = listen(sfd,10); //监听它,并设置允许最大的连接数为10个if(ret == -1){perror("listen");close(sfd);return -1;}return sfd;}//用于服务器的接收int tcp_accept(int sfd){struct sockaddr_in clientaddr;memset(&clientaddr, 0, sizeof(struct sockaddr));int addrlen = sizeof(struct sockaddr);//sfd接受客户端的连接,并创建新的socket为new_fd,将请求连接的客户端的ip、port保存在结构体clientaddr中int new_fd = accept(sfd, (struct sockaddr*)&clientaddr, &addrlen); if(new_fd == -1){perror("accept");close(sfd);return -1;}printf("%s %d success connet...\n", inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));return new_fd;}//用于客户端的连接int tcp_connect(const char* ip){int ret;int sfd = socket(AF_INET, SOCK_STREAM, 0); //申请新的socketif(sfd == -1){perror("socket");return -1;}struct sockaddr_in serveraddr;memset(&serveraddr, 0,sizeof(struct sockaddr));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(SERV_PORT);serveraddr.sin_addr.s_addr = inet_addr(ip); ret = connect(sfd, (struct sockaddr*)&serveraddr, sizeof(struct sockaddr)); //将sfd连接至指定的服务器网络地址 serveraddrif(ret == -1){perror("connect");close(sfd);return -1;}return sfd;}//用于信号处理,让服务器在按下Ctrl+c或Ctrl+\时不会退出void signalhandler(void){sigset_t sigSet;sigemptyset(&sigSet);sigaddset(&sigSet,SIGINT);sigaddset(&sigSet,SIGQUIT);sigprocmask(SIG_BLOCK,&sigSet,NULL);}
/*********************************************************************File Name: tcp_net_server.cAuthor: xxx date:Description: Fuction List:********************************************************************/#include "tcp_net_socket.h"int main(){signalhandler();int sfd = tcp_init();int ret;while(1){int cfd = tcp_accept(sfd);char buf;ret = read(cfd, &buf, sizeof(buf));if(ret == -1){perror("read");close(cfd);close(sfd);return -1;}buf = buf - 'a' + 'A';ret = write(cfd, &buf, 1);if(ret == -1){perror("write");close(cfd);close(sfd);return -1;}close(cfd);}close(sfd);return 0;}
/*********************************************************************File Name: tcp_net_client.cAuthor: xxx date:Description: Fuction List:********************************************************************/#include "tcp_net_socket.h"int main(int argc, char** argv){if(argc != 2){printf("Usage:./client ip\n");return -1;}int ret;char buf[2] = {0};while(1){int sfd = tcp_connect(argv[1]);memset(&buf,0,sizeof(buf));printf("请输入小写字母:");scanf("%s",&buf);ret = write(sfd, &buf[0], 1);if(ret == -1){perror("write");return -1;}ret = read(sfd, &buf[0], sizeof(char));if(ret == -1){perror("read");return -1;}printf("转换后的大写字母为:");printf("%c\n",buf[0]);close(sfd);}return 0;}
0 0
- 单个服务器和客户端的通信
- 服务器与单个客户端多次通信
- 服务器和客户端的通信
- 服务器和客户端的通信绘图
- 简单的客户端和服务器通信程序
- TCP实现客户端和服务器的通信
- Java实现单个客户端与服务器TCP通信
- Java实现单个客户端与服务器UDP通信
- SOCKET 服务器和客户端通信
- Android客户端和服务器通信
- 服务器和客户端 tcp通信
- 基于tcp的socket通信(单个客户端与服务端)
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 基础知识
- Android源码编译
- 责任链模式
- ubuntu平台下MySQL的环境搭建
- Java虚拟机垃圾回收(二) 垃圾回收算法:标记-清除算法 复制算法 标记-整理算法 分代收集算法 火车算法
- 单个服务器和客户端的通信
- sublime 中使用vim模式
- 基于Docker快速搭建Hadoop集群
- Ajax技术---核心XMLHttpRequest对象
- 关于Windows Mobile开发的一些基础课程
- actionbar实现tab的时添加背景图片
- 高性能异步web框架Sanic文档【六】
- word----遇到问题-----word中插入的图片无法左对齐----格式按钮为灰色
- HTML标题、段落、文本格式化、链接