法律咨询东莞网站建设,广州番禺建设银行网站登录,做网站必须哪几个软件,网站建设公司广告标题语硬件条件
当然你要先有一个云服务器#xff0c;腾讯云比阿里云便宜一点#xff0c;所以就用腾讯云了 问了师兄买这个98的就行#xff0c;选择CentOS#xff0c;不要选Ubuntu#xff0c;因为 嗯#xff0c;大概就是这样
编程测试
云服务器当然是作为服务端
server.cpp…硬件条件
当然你要先有一个云服务器腾讯云比阿里云便宜一点所以就用腾讯云了 问了师兄买这个98的就行选择CentOS不要选Ubuntu因为 嗯大概就是这样
编程测试
云服务器当然是作为服务端
server.cpp
#include stdio.h
#include string.h
#include unistd.h
#include stdlib.h
#include netdb.h
#include sys/types.h
#include sys/socket.h
#include arpa/inet.hint main(int argc, char *argv[])
{if (argc ! 2){printf(Using:./server port\nExample:./server 5005\n\n);return -1;}int listenfd;if ((listenfd socket(AF_INET, SOCK_STREAM, 0)) -1){perror(socket);return -1;}struct sockaddr_in servaddr;memset(servaddr, 0, sizeof(servaddr));servaddr.sin_family AF_INET;servaddr.sin_addr.s_addr htonl(INADDR_ANY);servaddr.sin_port htons(atoi(argv[1]));if (bind(listenfd, (struct sockaddr *)servaddr, sizeof(servaddr)) ! 0){perror(bind);close(listenfd);return -1;}if (listen(listenfd, 5) ! 0){perror(listen);close(listenfd);return -1;}int clientfd;int socklen sizeof(struct sockaddr_in);struct sockaddr_in clientaddr;clientfd accept(listenfd, (struct sockaddr *)clientaddr, (socklen_t *)socklen);printf(客户端%s已连接\n, inet_ntoa(clientaddr.sin_addr));char buffer[1024];while (true){int iret;memset(buffer, 0, sizeof(buffer));if ((iret recv(clientfd, buffer, sizeof(buffer), 0)) 0){printf(iret%d\n, iret);break;}printf(receive text:%s\n, buffer);strcpy(buffer, ok);if ((iret send(clientfd, buffer, strlen(buffer), 0)) 0){perror(send);break;}printf(send text:%s\n, buffer);}close(listenfd);close(clientfd);
}在自己的Linux上写客户端代码
#include stdio.h
#include string.h
#include unistd.h
#include stdlib.h
#include netdb.h
#include sys/types.h
#include sys/socket.h
#include arpa/inet.hint main(int argc, char *argv[])
{if (argc ! 3){printf(Using:./client ip port\nExample:./client 127.0.0.1 5005\n\n);return -1;}int sockfd;if ((sockfd socket(AF_INET, SOCK_STREAM, 0)) -1){perror(socket);return -1;}struct hostent *h;if ((h gethostbyname(argv[1])) 0){printf(gethostbyname failed.\n);close(sockfd);return -1;}struct sockaddr_in servaddr;memset(servaddr, 0, sizeof(servaddr));servaddr.sin_family AF_INET;servaddr.sin_port htons(atoi(argv[2]));memcpy(servaddr.sin_addr, h-h_addr, h-h_length);if (connect(sockfd, (struct sockaddr *)servaddr, sizeof(servaddr)) ! 0){perror(connect);close(sockfd);return -1;}char buffer[1024];for (int i 0; i 3; i){int iret;memset(buffer, 0, sizeof(buffer));sprintf(buffer, I am Monster number %d,i 1);if ((iret send(sockfd, buffer, strlen(buffer), 0)) 0){perror(send);break;}printf(send text:%s\n, buffer);memset(buffer, 0, sizeof(buffer));if ((iret recv(sockfd, buffer, sizeof(buffer), 0)) 0) {printf(iret%d\n, iret);break;}printf(receive text:%s\n, buffer);}close(sockfd);
}云服务器配置 要在防火墙这里自定义出用于通信的端口
测试
在云服务器运行服务程序
[lighthouseVM-4-11-centos bin]$ ./server 6666
客户端114.213.236.99已连接
receive text:I am Monster number 1
send text:ok
receive text:I am Monster number 2
send text:ok
receive text:I am Monster number 3
send text:ok
iret0在Linux运行客户程序
redwallredwall-G3-3500:~/Test/socket_test/bin$ ./client 1.116.137.21 6666
send text:I am Monster number 1
receive text:ok
send text:I am Monster number 2
receive text:ok
send text:I am Monster number 3
receive text:ok注意客户端连接的是服务端的公网IP