TCP建立套接字链接通信,知识点学习如下链接:https://www.cnblogs.com/zhanggaofeng/p/5869053.html
- 客户端代码
#include<sys/socket.h> #include<arpa/inet.h> #include<stdio.h> #include<string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <errno.h> int main(int argc,char *argv[]) { //声明套接字和套接字地址结构 int sockfd; struct sockaddr_in addr; if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1){ printf("socket error!"); } bzero(&addr, sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(8080); addr.sin_addr.s_addr=inet_addr("127.0.0.1"); if(connect(sockfd, (struct sockaddr*)&addr, sizeof(addr))==-1) { printf("connect failed ! error message :%s\n",strerror(errno)); } else printf("success"); close(sockfd); return 0; }
2
-
服务器端代码
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <errno.h> #include <arpa/inet.h> #define PORT 8080 //端口号 #define BACKLOG 10 //所允许的连接数量 using namespace std; int main() { int socketfd,connectfd; //描述符 struct sockaddr_in server; //服务器地址 struct sockaddr_in client; //客户地址 socketfd=socket(AF_INET, SOCK_STREAM, 0); if(socketfd==-1) { printf("socket failed\n"); close(socketfd); return 0; } bzero(&server, sizeof(server)); //初始化 server.sin_family=AF_INET; //tcp套接字 server.sin_port=htons(PORT); //将端口转换为网络字序 server.sin_addr.s_addr=htonl(INADDR_ANY); //内核选择ip if(bind(socketfd, (struct sockaddr *)&server,sizeof(server))==-1) //将套接字绑定到指定的协议地址 { printf("Bind error\n"); close(socketfd); return 0; } if(listen(socketfd, BACKLOG)==-1) //监听 (如果没有请求,则被阻塞,进入休眠状态) { printf("listen error\n"); close(socketfd); return 0; } socklen_t sin_size=sizeof(struct sockaddr_in); if ((connectfd=accept(socketfd, (struct sockaddr *)&client,&sin_size))==-1) //接收请求 { printf("connect failed ! error message :%s\n",strerror(errno)); close(socketfd); return 0; } printf("you got a connection form %s\n",inet_ntoa(client.sin_addr)); send(connectfd, "hello\n", 10, 0); //发送信息 close(connectfd); close(socketfd); return 0; }
在程序测试中曾遇到“connect failed ! error message :Socket operation on non-socket”错误,经百度调试发现是由于在客户端建立socket时“ if(listenfd= socket(AF_INET,SOCK_STREAM, 0)==-1) ”少写了一个括号。加上程序就运行正确了。第一篇博客,加油!