[英]C, network programming - sockets. One socket for read, another for write - possible?
我编写了一个简单的客户端,与C中的回显服务器进行通信:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#define SIZE 1024
int main(int argc, char **argv)
{
char buffer[SIZE+1];
int port = 6666;
char msg[1000];
int sockfd, recv_size;
struct sockaddr_in server_addr;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
inet_aton("127.0.0.1", &server_addr.sin_addr);
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}
while (1)
{
printf("> ");
fgets (msg, 999, stdin);
if ((send(sockfd, msg, strlen(msg), 0) < 0))
{
close(sockfd);
if (errno != 0)
{
perror("recv");
exit(1);
}
}
if ((recv_size = recv(sockfd, buffer, SIZE, 0)) == 0)
{
close(sockfd);
if (errno != 0)
{
perror("recv");
exit(1);
}
}
buffer[recv_size] = '\0';
printf("FROM SERVER: %s\n", buffer);
}
close(sockfd);
return 0;
}
我想知道,是否有可能使用一个套接字仅用于读取(在端口上,例如6666),而另一个套接字(端口6667)仅用于写入?
那我该如何实现服务器呢?
只需使用绑定到服务器侧两个不同端口的两个单独的套接字即可,此处无火箭技术。 问题是:您为什么要这样做?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.