linux socket 通信

client:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>	
#include <string.h>
#include <sys/types.h>          /* See NOTES */

//client->server 点对点通信
int main()
{
	//创建
	int  fd = socket(AF_INET, SOCK_STREAM, 0);
	if (fd == -1)
	{
		perror("socket");
	}
	int on = 1;
	setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));   //允许重用端口 

	struct	sockaddr_in addr_in;
	struct  in_addr  netip;
	inet_aton("192.168.105.214", &netip);
	addr_in.sin_addr = netip;
	addr_in.sin_port = htons(8080);
	addr_in.sin_family = AF_INET;

	//绑定
	bind(fd, (struct sockaddr*)&addr_in, sizeof(addr_in));

	//connect
	int ret = connect(fd, (struct sockaddr*)&addr_in, sizeof(addr_in));
	if (ret == 0)
	{
		printf("socket connected.\n");
		char buff[] = "hello world\n";
		while (1)
		{
			write(fd, buff, sizeof(buff));
			sleep(1);
		}
	}
	close(fd);
	return 0;
}

server:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>	
#include <string.h>
#include <sys/types.h>          /* See NOTES */

//client->server 点对点通信
int main()
{
	//创建
	int  fd = socket(AF_INET, SOCK_STREAM, 0);
	if (fd == -1)
	{
		perror("socket");
	}

	int on = 1;
	setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));//允许重用端口 

	struct	sockaddr_in addr_in;
	struct  in_addr  netip;
	inet_aton("192.168.80.130", &netip);
	addr_in.sin_addr = netip;
	addr_in.sin_port = htons(8080);
	addr_in.sin_family = AF_INET;

	//绑定
	bind(fd, (struct sockaddr*)&addr_in, sizeof(addr_in));

	//监听
	listen(fd, 10);

	struct	sockaddr_in new_conn;
	socklen_t len = sizeof(new_conn);
	//接受连接
	int newfd = accept(fd, (struct sockaddr*)&new_conn, &len);
	if (newfd > 0)
	{
		printf("socket server started\n");
		printf("new_conn is ip:%s\n", inet_ntoa(new_conn.sin_addr));
		//接受数据
		char buff[20] = { 0 };
		while (1)
		{
			bzero(buff, sizeof(buff));
			int ret2 = recv(newfd, buff, sizeof(buff), 0);
			if (ret2 > 0)
			{
				printf("%s\n", buff);
			}
		}
	}

	close(fd);
	return 0;
}

接收数据长度可变,怎么解决粘包的问题?

 

posted @ 2025-04-25 19:40  微笑的''80  阅读(1)  评论(0)    收藏  举报