linux系统编程-SOCKET通信基础编程(1)-TCP客户端创建

 

 

linux系统编程-SOCKET通信基础编程(0)-常用数据结构

linux系统编程-SOCKET通信基础编程(1)-TCP客户端创建

linux系统编程-SOCKET通信基础编程(2)-TCP服务端创建

 

 

1.客户端创建流程

原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);
两个重要的类型是 SOCK_STREAM 和 SOCK_DGRAM。 SOCK_STREAM表明数据象字符流 一样通过 socket 。而 SOCK_DGRAM 则表明数据将是数据报(datagrams)的形式。

socket 本身就时一个整型值,相当于一个文件描述符

1.1头文件

#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>

1.2客户端-创建socket对象

int socket(int domain, int type, int protocol);
server_sock = socket(AF_INET, SOCK_STREAM, 0);   // SOCK_STREAM 流套接口

1.3客户端-向服务端发送链接请求

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
ret = connect(client_sock,(struct sockaddr *)&server_addr, sizeof(server_addr));

1.4客户端-服务端发送消息

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ret = send(client_sock, buf, strlen(buf), 0);

1.5客户端-接收服务端消息

ssize_t  recv(int sockfd, void *buf, size_t len, int flags);
ret = recv(client_sock, buf, BUFLEN, 0);

1.6客户端-关闭soket对象

close(socket);

1.7客户端-完整例程

#include <stdio.h>
#include <string.h>
#include <errno.h> 

/* 相关头文件 */
#include <sys/types.h>  
#include <sys/socket.h>  
#include <netinet/in.h>


#define SERVER_PORT 6666
#define BUFLEN 256


int main()
{
	int ret = 0;
	char buf[BUFLEN] = {0};
	
	//1,创建socket
	int client_sock = socket(AF_INET, SOCK_STREAM, 0);
	if(client_sock < 0)
	{
		perror("socket");
		goto SOCK_ERR;
	}
	
	//2,填充充服务器的地址信息
	struct sockaddr_in server_addr;
	bzero(&server_addr, sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	//server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
	//
	//server_addr.sin_addr.s_addr = inet_addr("192.168.1.223");
	
	//3,连接服务器
	ret = connect(client_sock,(struct sockaddr *)&server_addr, sizeof(server_addr));
	if(ret < 0)
	{
		perror("connect");
		goto SOCK_ERR;
	}
	
	//4,发送数据
	strcpy(buf, "I am a client\n");
	ret = send(client_sock, buf, strlen(buf), 0);
	if(ret < 0)
	{
		perror("send");
		goto SOCK_ERR;
	}
	
	//5,接收数据
	bzero(buf, BUFLEN);
	ret = recv(client_sock, buf, BUFLEN, 0);
	if(ret < 0)
	{
		perror("recv");
		goto SOCK_ERR;
	}
	
	printf("recv msg from server:%s\n", buf);
	
	//6,关闭连接
	close(client_sock);
SOCK_ERR:
	return 0;
}

猜你喜欢

转载自blog.csdn.net/yuupengsun/article/details/106323480