1
我试图用八度来接收数据并将数据发送回C++客户端。它第一次运作。通过套接字在八度和C++程序之间发送数据
但是,如果我再次在同一个八度段会话中执行脚本。客户端无法连接到八度。客户端输出:连接拒绝
倍频脚本:
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;
}
Octave看起来像是一直在监听和等待连接的“服务器”。您的代码片段(从'b = accept(s)'到'disconnect(b)')应该处于某种类型的循环中,以便它可以继续接受连接。 看起来它正在执行一次脚本,然后完成执行 – KuramaYoko 2015-02-11 18:06:58
连接被拒绝是一个清楚的迹象表明另一端(服务器在这里)没有在监听,你可以通过以下命令验证相同的命令:netstat -an | grep <你的端口号> – sanjayk79 2015-02-12 03:56:51
如果你等几分钟,问题就消失了,然后尝试重新运行Octave服务器端和clinet?然后这可能是一个SO_REUSEADDR丢失的问题 – Andy 2015-02-15 10:15:01