网络通信 TCP 简单c_s 通讯

server端:

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>

int main()
{
	printf("服务器创建socket...\n");
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}

	printf("准备地址...\n");
	struct sockaddr_in addr = {};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7777);
	addr.sin_addr.s_addr = inet_addr("10.0.2.15");
	socklen_t len = sizeof(addr);

	printf("绑定socket与地址...\n");
	if(bind(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("bind");
		return -1;
	}

	printf("设置监听...\n");
	if(listen(sockfd,5)) 
	{
		perror("listen");
		return -1;
	}

	printf("等待客户端连接...\n");
	for(;;)
	{
		struct sockaddr_in addrcli = {};
		int clifd = accept(sockfd,(struct sockaddr*)&addrcli,&len);
		if(0 > clifd)
		{
			perror("accept");
			continue;
		}

		if(0 == fork())
		{
			char buf[1024] = {};
			for(;;)
			{
				printf("read:");
				read(clifd,buf,sizeof(buf));
				printf("%s\n",buf);
				if(0 == strcmp("quit",buf))
				{
					close(clifd);
					return 0;
				}
				printf(">");
				gets(buf);
				write(clifd,buf,strlen(buf)+1);
			}
		}
	}
}

client端:

#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>

int main()
{
	printf("服务器创建socket...\n");
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(0 > sockfd)
	{
		perror("socket");
		return -1;
	}

	printf("准备地址...\n");
	struct sockaddr_in addr = {};
	addr.sin_family = AF_INET;
	addr.sin_port = htons(7777);
	addr.sin_addr.s_addr = inet_addr("47.97.229.46");
	socklen_t len = sizeof(addr);

	printf("绑定连接服务器...\n");
	if(connect(sockfd,(struct sockaddr*)&addr,len))
	{
		perror("bind");
		return -1;
	}

	for(;;)
	{
			char buf[1024] = {};
			printf(">");
			gets(buf);
			write(sockfd,buf,strlen(buf)+1);
			if(0 == strcmp("quit",buf))
			{
				printf("通信结束!\n");
				break;
			}
			printf("read:");
			read(sockfd,buf,sizeof(buf));
			printf("%s\n",buf);
	}
	close(sockfd);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,在C语言中开发TCP通讯代码的一般步骤如下: 1. 建立套接字:使用 socket() 函数建立套接字。 2. 绑定套接字:使用 bind() 函数将套接字和一个本地地址绑定在一起。 3. 监听套接字:使用 listen() 函数将套接字设置为监听状态,准备接受连接请求。 4. 接受连接请求:使用 accept() 函数接受客户端的连接请求。 5. 接收数据:使用 recv() 函数接收客户端发来的数据。 6. 发送数据:使用 send() 函数将数据发送给客户端。 7. 关闭套接字:使用 close() 函数关闭套接字。 希望这些信息对你有帮助。 ### 回答2: 基于C语言开发的TCP通讯代码主要包括以下几个步骤: 1. 引入头文件:需要引入系统提供的网络编程相关头文件,如<sys/types.h>、<sys/socket.h>、<netinet/in.h>等。 2. 创建套接字:使用socket()函数创建一个套接字,指定协议簇(如AF_INET)和套接字类型(如SOCK_STREAM)。 3. 设置地址和端口:使用结构体类型sockaddr_in来设置服务器的地址和端口号,并将其绑定到套接字上。 4. 监听连接:使用listen()函数使套接字处于监听状态,等待客户端连接。 5. 接收连接:使用accept()函数接受客户端的连接请求,并创建一个新的套接字用于与该客户端通信。 6. 发送和接收数据:使用send()和recv()函数分别进行数据的发送和接收。可以使用循环来确保发送或接收完整的数据。 7. 关闭连接:使用close()函数关闭套接字,释放资源。 上述是基本的TCP通讯过程,以下是一个示例的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define PORT 12345 int main() { int server_sockfd, client_sockfd; socklen_t client_len; struct sockaddr_in server_addr, client_addr; char buf[256]; // 创建套接字 server_sockfd = socket(AF_INET, SOCK_STREAM, 0); // 设置地址和端口 server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); bind(server_sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); // 监听连接 listen(server_sockfd, 5); printf("Server listening on port %d...\n", PORT); while(1) { // 接受连接 client_len = sizeof(client_addr); client_sockfd = accept(server_sockfd, (struct sockaddr*)&client_addr, &client_len); printf("Server got connection from %s\n", inet_ntoa(client_addr.sin_addr)); // 接收数据 memset(buf, 0, sizeof(buf)); recv(client_sockfd, buf, sizeof(buf), 0); printf("Received: %s\n", buf); // 发送数据 send(client_sockfd, "Hello from server", sizeof("Hello from server"), 0); // 关闭连接 close(client_sockfd); } return 0; } ``` 以上代码展示了一个简单的基于C语言开发的TCP通讯服务器端,能够接受客户端的连接请求,并进行数据的接收和发送。 ### 回答3: TCP(传输控制协议)是一种常用的用于网络通信的协议,基于C语言可以开发出相应的TCP通讯代码。 首先,需要使用C语言的socket编程库,如<sys/socket.h>和<netinet/in.h>来创建TCP连接。以下是一个简单的基于C语言开发的TCP通讯代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int sockfd, newsockfd, portno, clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; // 创建TCP套接字 sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("Error opening socket"); return 1; } // 设置服务器地址和端口号 portno = 1234; bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); // 绑定套接字到指定的地址和端口号 if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { perror("Error on binding"); return 1; } // 监听连接请求 listen(sockfd, 5); clilen = sizeof(cli_addr); // 接受新的连接请求 newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) { perror("Error on accept"); return 1; } // 读取客户端发送的消息 bzero(buffer, 256); n = read(newsockfd, buffer, 255); if (n < 0) { perror("Error reading from socket"); return 1; } printf("Message from client: %s\n", buffer); // 回复客户端 n = write(newsockfd, "I got your message", 18); if (n < 0) { perror("Error writing to socket"); return 1; } // 关闭套接字 close(newsockfd); close(sockfd); return 0; } ``` 在上述代码中,通过socket()函数创建了一个TCP套接字,使用bind()函数将套接字绑定到指定的服务器地址和端口号,使用listen()函数开始监听连接请求。当有新的连接请求到来时,使用accept()函数接受连接,并通过read()函数读取客户端发送的消息。然后,使用write()函数向客户端发送回复消息。最后,使用close()函数关闭套接字。 这只是一个简单TCP通讯代码示例,实际应用中可能需要进行更多的错误处理和逻辑判断,以保证通讯的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值