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
在倍频程和c+之间发送数据+;通过套接字编程 我尝试用八度来刷新数据,并将数据发送回C++客户端。这是第一次奏效_C++_Sockets_Octave - Fatal编程技术网

在倍频程和c+之间发送数据+;通过套接字编程 我尝试用八度来刷新数据,并将数据发送回C++客户端。这是第一次奏效

在倍频程和c+之间发送数据+;通过套接字编程 我尝试用八度来刷新数据,并将数据发送回C++客户端。这是第一次奏效,c++,sockets,octave,C++,Sockets,Octave,但是如果我在同一个八度音程中再次执行脚本。客户端无法连接到倍频程。客户端输出:拒绝连接 八度脚本: s=socket(); bind(s,12345); a=listen(s,5) b=accept(s) len=255; data=recv(b,len) zahl = 10+str2double(char(data)) sendDATEN = "Daten sind da" send(b,sendDATEN,MSG_WAITALL) disconnect(b) 客户: int main(in

但是如果我在同一个八度音程中再次执行脚本。客户端无法连接到倍频程。客户端输出:拒绝连接

八度脚本:

s=socket();
bind(s,12345);
a=listen(s,5)
b=accept(s)
len=255;
data=recv(b,len)
zahl = 10+str2double(char(data))
sendDATEN = "Daten sind da"
send(b,sendDATEN,MSG_WAITALL)
disconnect(b)
客户:

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 3) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    n = write(sockfd,"1.11231231",strlen("1.11231231"));
    if (n < 0) 
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,100);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    close(sockfd);
    return 0;
}
intmain(intargc,char*argv[])
{
int sockfd,端口号,n;
服务地址中的结构sockaddr\u;
结构主机*服务器;
字符缓冲区[256];
如果(argc<3){
fprintf(stderr,“使用%s主机名端口,\n”,argv[0]);
出口(0);
}
portno=atoi(argv[2]);
sockfd=套接字(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
错误(“打开套接字时出错”);
server=gethostbyname(argv[1]);
如果(服务器==NULL){
fprintf(stderr,“错误,没有这样的主机\n”);
出口(0);
}
bzero((char*)&serv_addr,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
b复制((字符*)服务器->h_地址,
(char*)和serv_addr.sin_addr.s_addr,
服务器->h_长度);
serv_addr.sin_port=htons(端口号);
if(connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
错误(“连接错误”);
n=写入(sockfd,“1.11231231”,strlen(“1.11231231”);
if(n<0)
错误(“写入套接字时出错”);
b0(缓冲器,256);
n=读取(sockfd,缓冲器,100);
if(n<0)
错误(“从套接字读取错误”);
printf(“%s\n”,缓冲区);
关闭(sockfd);
返回0;
}

您似乎无法绑定,因为该地址已在使用中。你还没有回答我的问题,但我想如果你等几分钟,你就可以连接了(用netstat检查状态!)


octave sockets中添加了SOL_SOCKET,因此octave看起来像是一个“服务器”,它总是在侦听和等待连接。您的代码段(从“b=accept(s)”到“disconnect(b)”应该处于某种循环中,以便它可以继续接受连接。看起来它正在执行您的脚本一次,然后完成执行。拒绝连接清楚地表明另一端(此处的服务器)没有侦听。您可以通过以下命令来验证这一点:netstat-an | grep如果您等待几分钟,然后尝试重新运行Octave服务器端和clinet,问题是否消失?那么这可能是SO_REUSEADDR丢失的问题。问题在Octave的bind命令中。因此,SO_REUSEADDR应该修复它。但是我在哪里可以修复它是否添加此选项?