我正在openSUSE 12.3中開發一個C++應用程序,它的一個部分是負責通過Socket(在局域網內)向設備發送數據。我使用此代碼C++在Linux下的Socket編程
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *printer;
portno = 9100;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0) error("ERROR opening socket\n");
printer = gethostbyname("100.0.69.23");
if(printer == NULL) error("No such device on 100.0.69.23\n");
//set bit set to zero
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *) printer->h_addr, (char *) &serv_addr.sin_addr.s_addr, printer- >h_length);
serv_addr.sin_port = htons(portno);
if(connect(sockfd, (struct sockaddr *) & serv_addr, sizeof(serv_addr)) < 0)
{error("ERROR connecting");
return;
}
n = write(sockfd, data, datalenght);
if(n < 0) error("ERROR sending command to printer");
n = read(sockfd, buffer, 200);
我認爲的代碼是正確的,但連接函數返回-1,並似乎無法連接到該設備(打印機)。這段代碼是用openSUSE 11編寫的,工作正常,我可以向設備發送/接收數據,但是當我將它複製/粘貼到新系統(openSUSE 12.3)時,它使我無法連接。我ping了正在使用的特定IP的結果,表明設備可通過LAN到達
您發送給打印機的字節數是多少? – suspectus 2013-05-01 12:55:56
您在初始化之前檢查「打印機」,然後再檢查。那不好。 – 2013-05-01 12:59:09
另外,connect()返回的錯誤究竟是什麼?它必須有你的問題的答案的90%。 – 2013-05-01 12:59:35