Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在TCP/IP聊天程序中工作 /*服务器代码*/ #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义最大尺寸50 无效传输(); 无效接收(); int sockfd、newsockfd、retval; socklen_t actuallen; int receidbytes,sentbytes; serveraddr、clientaddr中的结构sockaddr\u; //字符buff[MAXSIZE]; int a=0,端口号; main() { printf(“输入端口号:”); scanf(“%d”和端口号); sockfd=套接字(AF_INET,SOCK_STREAM,0); 如果(sockfd==-1){ printf(“\n套接字创建错误”); 出口(-1); } serveraddr.sin_family=AF_INET; serveraddr.sin\u port=htons(端口号); serveraddr.sin\u addr.s\u addr=htonl(INADDR\u ANY); retval=bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); 如果(retval==-1){ printf(“绑定错误”); 关闭(sockfd); 出口(0); } retval=listen(sockfd,1); 如果(retval==-1){ 关闭(sockfd); 出口(0); } 实际值=sizeof(客户地址); newsockfd=accept(sockfd,(struct sockaddr*)&clientaddr,&actuallen); 如果(newsockfd==-1){ 关闭(sockfd); 出口(0); } int i=1; pid_t pid=fork(); 如果(pid==0) 传输(); 其他的 receive(); 关闭(newsockfd); 关闭(sockfd); } 无效接收() { 字符buff[50];int f=1; while(f) { recedbytes=recv(newsockfd,buff,sizeof(buff),0); 如果(接收字节==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } printf(“接收字节:%d\n”,接收字节); 如果(strcmp(buff,“Stop”)==0) { 卖出期权(“交割”); strcpy(浅黄色,“停止”); sentbytes=send(newsockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } f=0; } 否则{ char cl[]=“客户:”; strcat(cl,buff); 看跌期权(cl); } } } 无效传输() { 字符buff[50]; 而(1) { //printf(“%s”,“You:”); 获得(buff); sentbytes=send(newsockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } } } /*客户端代码*/ #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义最大尺寸50 无效传输(); 无效接收(); int sockfd,retval; int receidbytes,sentbytes; serveraddr中的结构sockaddr\u; //字符buff[MAXSIZE]; main() { 国际港口号; printf(“输入端口号:”); scanf(“%d”和端口号); sockfd=套接字(AF_INET,SOCK_STREAM,0); 如果(sockfd==-1){ printf(“\n套接字创建错误”); 出口(-1); } serveraddr.sin_family=AF_INET; serveraddr.sinu端口=htons(端口号); serveraddr.sin_addr.s_addr=inet_addr(“127.0.0.1”); retval=connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); 如果(retval==-1){ printf(“连接错误”);close(sockfd); 出口(0); } int i=1; pid_t pid=fork(); 如果(pid==0) 传输(); 其他的 receive(); printf(“\n”); 关闭(sockfd); } 无效接收() { 字符buff[50]; int f=1; while(f) { recedbytes=recv(sockfd,buff,sizeof(buff),0); 如果(接收字节==-1){ 关闭(sockfd); 出口(0); } printf(“接收字节:%d\n”,接收字节); 如果(strcmp(buff,“Stop”)==0) { 卖出期权(“交割”); f=0; strcpy(浅黄色,“停止”); sentbytes=send(sockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 出口(0); } } 否则{ char sr[]=“服务器:”; strcat(sr,buff); 卖出期权(sr); } } } 无效传输() { 字符buff[50]; 而(1) { //printf(“%s”,“You:”); 获得(buff); sentbytes=send(sockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 出口(0); } } }_C_Sockets_Tcp_Send_Gets - Fatal编程技术网

无法在TCP/IP聊天程序中工作 /*服务器代码*/ #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义最大尺寸50 无效传输(); 无效接收(); int sockfd、newsockfd、retval; socklen_t actuallen; int receidbytes,sentbytes; serveraddr、clientaddr中的结构sockaddr\u; //字符buff[MAXSIZE]; int a=0,端口号; main() { printf(“输入端口号:”); scanf(“%d”和端口号); sockfd=套接字(AF_INET,SOCK_STREAM,0); 如果(sockfd==-1){ printf(“\n套接字创建错误”); 出口(-1); } serveraddr.sin_family=AF_INET; serveraddr.sin\u port=htons(端口号); serveraddr.sin\u addr.s\u addr=htonl(INADDR\u ANY); retval=bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); 如果(retval==-1){ printf(“绑定错误”); 关闭(sockfd); 出口(0); } retval=listen(sockfd,1); 如果(retval==-1){ 关闭(sockfd); 出口(0); } 实际值=sizeof(客户地址); newsockfd=accept(sockfd,(struct sockaddr*)&clientaddr,&actuallen); 如果(newsockfd==-1){ 关闭(sockfd); 出口(0); } int i=1; pid_t pid=fork(); 如果(pid==0) 传输(); 其他的 receive(); 关闭(newsockfd); 关闭(sockfd); } 无效接收() { 字符buff[50];int f=1; while(f) { recedbytes=recv(newsockfd,buff,sizeof(buff),0); 如果(接收字节==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } printf(“接收字节:%d\n”,接收字节); 如果(strcmp(buff,“Stop”)==0) { 卖出期权(“交割”); strcpy(浅黄色,“停止”); sentbytes=send(newsockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } f=0; } 否则{ char cl[]=“客户:”; strcat(cl,buff); 看跌期权(cl); } } } 无效传输() { 字符buff[50]; 而(1) { //printf(“%s”,“You:”); 获得(buff); sentbytes=send(newsockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } } } /*客户端代码*/ #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义最大尺寸50 无效传输(); 无效接收(); int sockfd,retval; int receidbytes,sentbytes; serveraddr中的结构sockaddr\u; //字符buff[MAXSIZE]; main() { 国际港口号; printf(“输入端口号:”); scanf(“%d”和端口号); sockfd=套接字(AF_INET,SOCK_STREAM,0); 如果(sockfd==-1){ printf(“\n套接字创建错误”); 出口(-1); } serveraddr.sin_family=AF_INET; serveraddr.sinu端口=htons(端口号); serveraddr.sin_addr.s_addr=inet_addr(“127.0.0.1”); retval=connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); 如果(retval==-1){ printf(“连接错误”);close(sockfd); 出口(0); } int i=1; pid_t pid=fork(); 如果(pid==0) 传输(); 其他的 receive(); printf(“\n”); 关闭(sockfd); } 无效接收() { 字符buff[50]; int f=1; while(f) { recedbytes=recv(sockfd,buff,sizeof(buff),0); 如果(接收字节==-1){ 关闭(sockfd); 出口(0); } printf(“接收字节:%d\n”,接收字节); 如果(strcmp(buff,“Stop”)==0) { 卖出期权(“交割”); f=0; strcpy(浅黄色,“停止”); sentbytes=send(sockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 出口(0); } } 否则{ char sr[]=“服务器:”; strcat(sr,buff); 卖出期权(sr); } } } 无效传输() { 字符buff[50]; 而(1) { //printf(“%s”,“You:”); 获得(buff); sentbytes=send(sockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 出口(0); } } }

无法在TCP/IP聊天程序中工作 /*服务器代码*/ #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义最大尺寸50 无效传输(); 无效接收(); int sockfd、newsockfd、retval; socklen_t actuallen; int receidbytes,sentbytes; serveraddr、clientaddr中的结构sockaddr\u; //字符buff[MAXSIZE]; int a=0,端口号; main() { printf(“输入端口号:”); scanf(“%d”和端口号); sockfd=套接字(AF_INET,SOCK_STREAM,0); 如果(sockfd==-1){ printf(“\n套接字创建错误”); 出口(-1); } serveraddr.sin_family=AF_INET; serveraddr.sin\u port=htons(端口号); serveraddr.sin\u addr.s\u addr=htonl(INADDR\u ANY); retval=bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); 如果(retval==-1){ printf(“绑定错误”); 关闭(sockfd); 出口(0); } retval=listen(sockfd,1); 如果(retval==-1){ 关闭(sockfd); 出口(0); } 实际值=sizeof(客户地址); newsockfd=accept(sockfd,(struct sockaddr*)&clientaddr,&actuallen); 如果(newsockfd==-1){ 关闭(sockfd); 出口(0); } int i=1; pid_t pid=fork(); 如果(pid==0) 传输(); 其他的 receive(); 关闭(newsockfd); 关闭(sockfd); } 无效接收() { 字符buff[50];int f=1; while(f) { recedbytes=recv(newsockfd,buff,sizeof(buff),0); 如果(接收字节==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } printf(“接收字节:%d\n”,接收字节); 如果(strcmp(buff,“Stop”)==0) { 卖出期权(“交割”); strcpy(浅黄色,“停止”); sentbytes=send(newsockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } f=0; } 否则{ char cl[]=“客户:”; strcat(cl,buff); 看跌期权(cl); } } } 无效传输() { 字符buff[50]; 而(1) { //printf(“%s”,“You:”); 获得(buff); sentbytes=send(newsockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 关闭(newsockfd); 出口(0); } } } /*客户端代码*/ #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #定义最大尺寸50 无效传输(); 无效接收(); int sockfd,retval; int receidbytes,sentbytes; serveraddr中的结构sockaddr\u; //字符buff[MAXSIZE]; main() { 国际港口号; printf(“输入端口号:”); scanf(“%d”和端口号); sockfd=套接字(AF_INET,SOCK_STREAM,0); 如果(sockfd==-1){ printf(“\n套接字创建错误”); 出口(-1); } serveraddr.sin_family=AF_INET; serveraddr.sinu端口=htons(端口号); serveraddr.sin_addr.s_addr=inet_addr(“127.0.0.1”); retval=connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr)); 如果(retval==-1){ printf(“连接错误”);close(sockfd); 出口(0); } int i=1; pid_t pid=fork(); 如果(pid==0) 传输(); 其他的 receive(); printf(“\n”); 关闭(sockfd); } 无效接收() { 字符buff[50]; int f=1; while(f) { recedbytes=recv(sockfd,buff,sizeof(buff),0); 如果(接收字节==-1){ 关闭(sockfd); 出口(0); } printf(“接收字节:%d\n”,接收字节); 如果(strcmp(buff,“Stop”)==0) { 卖出期权(“交割”); f=0; strcpy(浅黄色,“停止”); sentbytes=send(sockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 出口(0); } } 否则{ char sr[]=“服务器:”; strcat(sr,buff); 卖出期权(sr); } } } 无效传输() { 字符buff[50]; 而(1) { //printf(“%s”,“You:”); 获得(buff); sentbytes=send(sockfd,buff,sizeof(buff),0); if(sentbytes==-1){ 关闭(sockfd); 出口(0); } } },c,sockets,tcp,send,gets,C,Sockets,Tcp,Send,Gets,我正在尝试使用TCP/IP创建聊天server/client程序,并在C(linux)中创建进程。 客户端程序和服务器程序的transmit函数中的gets(buff)似乎没有起到阻止作用,而send(…)函数正在传输一个空的buff。 因此,服务器程序和客户端程序中的客户机:或服务器:正在打印,即使对方程序实际上没有发送任何数据 /* Server Code */ #include<stdio.h> #include<stdio.h> #include<stdli

我正在尝试使用
TCP/IP
创建聊天
server/client
程序,并在
C(linux)
中创建进程。 客户端程序和服务器程序的
transmit
函数中的
gets(buff)
似乎没有起到阻止作用,而
send(…)
函数正在传输一个空的buff。 因此,服务器程序和客户端程序中的客户机:或服务器:正在打印,即使对方程序实际上没有发送任何数据

/* Server Code */
#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<pthread.h>

#define MAXSIZE 50

void transmit();
void Recieve();

int sockfd, newsockfd, retval;
socklen_t actuallen;
int recedbytes, sentbytes;
struct sockaddr_in serveraddr, clientaddr;
//  char buff[MAXSIZE];
int a = 0, port_no;

main()
{   
  printf("Enter port number: ");
  scanf("%d",&port_no);

  sockfd=socket(AF_INET,SOCK_STREAM,0);
  if(sockfd==-1) {
    printf("\nSocket creation error");
    exit(-1);
  }

  serveraddr.sin_family=AF_INET;
  serveraddr.sin_port=htons(port_no);
  serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);

  retval= bind(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));
  if(retval == -1) {
    printf("Binding error");
    close(sockfd);
    exit(0);
  }

  retval = listen(sockfd, 1);
  if (retval == -1) {
    close(sockfd);
    exit(0);
  }

  actuallen = sizeof(clientaddr);
  newsockfd = accept(sockfd, (struct sockaddr*)&clientaddr, &actuallen);
  if(newsockfd == -1) {
    close(sockfd);
    exit(0);
  }

  int i=1; 
  pid_t pid = fork();
  if(pid == 0)
    transmit();
  else
    Recieve();

  close(newsockfd);
  close(sockfd);
}

void Recieve()
{
  char buff[50]; int f=1;
  while(f)
  { 
    recedbytes=recv(newsockfd,buff,sizeof(buff),0);
    if(recedbytes == -1) {
      close(sockfd);
      close(newsockfd);
      exit(0);
    }
    printf("recdbytes: %d\n", recedbytes);
    if(strcmp(buff, "Stop") == 0)
    {  
      puts("Closing");
      strcpy(buff,"Stop");

      sentbytes=send(newsockfd,buff,sizeof(buff),0);
      if(sentbytes == -1) {
        close(sockfd);
        close(newsockfd);
        exit(0);
      }
      f=0;
    }
    else {
      char cl[]="Client: ";
      strcat(cl,buff);
      puts(cl);
    }
  }
}

void transmit()
{
  char buff[50];
  while(1)
  {
    //  printf("%s","You: ");
    gets(buff);
    sentbytes = send(newsockfd, buff, sizeof(buff), 0);
    if(sentbytes == -1) {
      close(sockfd);
      close(newsockfd);
      exit(0);
    }
  }
}


/* Client Code */
#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<pthread.h>

#define MAXSIZE 50 

void transmit();
void Recieve(); 

int sockfd, retval;
int recedbytes, sentbytes;
struct sockaddr_in serveraddr;
//  char buff[MAXSIZE];


main()
{        
  int port_no;
  printf("Enter port number:");
  scanf("%d",&port_no); 

  sockfd=socket(AF_INET,SOCK_STREAM,0);
  if(sockfd == -1) {
    printf("\nSocket creation error");
    exit(-1);
  }

  serveraddr.sin_family = AF_INET;
  serveraddr.sin_port = htons(port_no);
  serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

  retval = connect(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));
  if(retval == -1) {
    printf("Connection error"); close(sockfd);
    exit(0);
  }

  int i = 1;
  pid_t pid = fork();
  if(pid == 0)
    transmit();
  else
    Recieve();
  printf("\n");
  close(sockfd);
}

void Recieve()
{
  char buff[50];
  int f=1;
  while(f)
  {
    recedbytes = recv(sockfd, buff, sizeof(buff), 0);   
    if(recedbytes == -1) {
      close(sockfd);
      exit(0);
    }
    printf("recdbytes: %d\n",recedbytes);

    if(strcmp(buff, "Stop") == 0)
    {
      puts("Closing"); 
      f = 0;
      strcpy(buff, "Stop");
      sentbytes = send(sockfd, buff, sizeof(buff), 0);
      if(sentbytes == -1) {
        close(sockfd);
        exit(0);
      }
    }
    else {
      char sr[] = "Server :";
      strcat(sr, buff);
      puts(sr);
    }
  }
}

void transmit()
{
  char buff[50];
  while(1)
  { 
    //  printf("%s","You: ");
    gets(buff);
    sentbytes = send(sockfd, buff, sizeof(buff), 0);
    if(sentbytes == -1) {
      close(sockfd);
      exit(0);
    }
  }
}
您如何期望
strcmp
知道接收字符串的长度?您从未使用
recedbytes
执行过任何操作

您还有许多其他bug。您希望
recv
以某种方式接收消息,尽管您从未实现过任何消息协议

如果您想发送和接收消息,您必须做三件事:

  • 准确定义“信息”是什么
  • 编写代码以发送消息
  • 编写代码以接收消息

  • 代码中没有证据表明你做过这些事。如果您对消息的定义是“正好50个字节,始终包含一个零字节,表示接收方应处理的数据结束”,那么您在1和2上可能没有问题,但您肯定没有做3。

    不要使用
    get
    ,使用
    fgets
    函数读取行。但是fgets不是用于文件输入吗?我想从终端获取输入。您可以提及
    stdin
    从标准输入获取输入。是的,我这样做了,它似乎仍然不起作用。我将get替换为if(fgets(buff,sizeof(buff),stdin)!=NULL){//send}'
    if(fgets(buff,sizeof(buff),stdin)!=NULL){//send buff}
    recedbytes=recv(newsockfd,buff,sizeof(buff),0);
    if(recedbytes == -1) {
      close(sockfd);
      close(newsockfd);
      exit(0);
    }
    printf("recdbytes: %d\n", recedbytes);
    if(strcmp(buff, "Stop") == 0)