我在ubuntu中学习socket程序,为此我编写了以下服务器-客户端通信程序。程序没有打开端口。我还有一些关于服务器-客户端通信的其他问题:
当服务器接受客户机请求时,服务器是否在接受请求时就开始从客户机读取数据?
u_connect和u_accept()返回的文件描述符是否相同?(我找不到,因为我的端口没有打开)
既然我在同一台计算机上测试服务器-客户端对话,我可以使用随机数作为端口吗?
我使用的wrapper library包含socket编程的OS函数。
代码如下:
服务器c

int main()
{
  char client[50];
  char buf[1024];
  u_port_t portnumber;
  portnumber = 4862;
  int fd = u_open(portnumber);
  int communFd = u_accept(fd, client, 50);
  printf("Opened com %d\n\n", communFd);
  fprintf(stderr, "\nComun fd is %d\n\n\n", communFd);
  read(communFd, buf, 1024);
  write(STDOUT_FILENO, buf, 1024);
  fprintf(stderr, "\n\nReading complete\n");
  return 0;
}

客户c
int main()
{
  u_port_t portnumber;
  portnumber = 4862;
  char client[] = "Alfred";
  char buf[1024];
  int communFd = u_connect(portnumber, client);
  printf("comun is %d\n", communFd);
  read(STDIN_FILENO, buf, 1024);
  write(communFd, buf, 1024);
  return 0;
}

最佳答案

当服务器接受客户机请求时,服务器是否开始读取
从客户接受请求的那一刻起?
当客户端发送的数据(通过write())被接收并可进入套接字读取缓冲区时,服务器可以读取。
u_connect和u_accept()返回的文件描述符是否相同?(一)
找不到,因为我的端口没有打开)
不。即使服务器端和客户端在同一进程中运行也不行。
我可以使用随机数作为端口吗,因为我正在测试服务器客户端
在同一台电脑上说话?
您可以绑定从0到65535的端口。
从0到1024的服务称为known ports,已经由IANA分配给特定的服务。我的建议是使用49152-65535范围内的端口号,但没有人禁止您使用较低的值。
如果端口被另一个进程绑定,它将返回一个错误代码。试试另一个

关于c - 在Ubuntu中用C进行套接字编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14562901/

10-12 05:53