TCP Client网络编程基本步骤
- 创建socket,指定使用TCP协议
- 使用connect连接服务器
- 使用recv/send接收/发送数据关闭socket
TCP-connect连接请求
!man 2 connect
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:给服务器发送客户端的连接请求
参数:sockfd:文件描述符,socket函数的返回值addr:要连接的服务器的网络信息结构体(需要自己设置)addrlen:add的长度
返回值:成功:0失败:-1
注意:
connect建立连接之后不会产生新的套接字
连接成功后才可以开始传输TCP数据
头文件:#include
代码实现
#include <stdio.h>
#include <cstring>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <arpa/inet.h>
#define PORT 8888
#define MESSAGE_LEN 1024int main(int argc,char* argv[]){int ret=-1;int socket_fd;struct sockaddr_in serveraddr;char sendbuf[MESSAGE_LEN]={0,};char recvbuf[MESSAGE_LEN]={0,};socket_fd=socket(AF_INET,SOCK_STREAM,0);if(socket_fd<0){std::cout<<"Failed to create socket!"<<std::endl;exit(-1);}serveraddr.sin_family=AF_INET;//地址族serveraddr.sin_port=htons(PORT);//端口号serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1");//这里将字符串转换成整型ret=connect(socket_fd,(struct sockaddr *)&serveraddr,sizeof(sockaddr));if(ret < 0){std::cout<<"Failed to connect server!"<<std::endl;exit(-1);}std::cout<<"connect success!"<<std::endl;while(1){memset(sendbuf,0,MESSAGE_LEN);fgets(sendbuf,sizeof(sendbuf),stdin);//输入ret = send(socket_fd,sendbuf,strlen(sendbuf),0);//发送if(ret <= 0){std::cout<<"Failed to send data!"<<std::endl;break;}if(strcmp(sendbuf,"quit")==0){break;}ret = recv(socket_fd,recvbuf,MESSAGE_LEN,0);//接收数据recvbuf[ret]='\0';std::cout<<"recv:"<<recvbuf<<std::endl;//输出}close(socket_fd);return 0;
}