#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <cstdio>
using namespace std;
int main(int argc, char *argv[])
{
int port, n,sockfd;
struct sockaddr_in srv_addr;
struct hostent *serv;
char buffer[256];
if(argc<3) {
cout <<"\n ussage: host port\nexiting\n";
return 0;
}
port = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
cout <<"\nsocket creation on"<<port<<" failed\nexiting\ncheck to see if port is in use";
return 0;
}
serv = gethostbyname(argv[1]);
if (serv=NULL) {
cout << "\n" << serv << " is not a valid host name\nexiting";
return 0;
}
bzero((char *) &srv_addr, sizeof(srv_addr));
srv_addr.sin_family = AF_INET;
bcopy((char *) serv->h_addr, (char *) &srv_addr.sin_addr.s_addr, serv->h_length);
srv_addr.sin_port=htons(port);
if (connect(sockfd,(sockaddr*)&srv_addr, sizeof (srv_addr)) < 0) {
cout << " \nconnection failed\n";}
return 0;
}
cout << "\nType message\n";
bzero(buffer, 256);
cin.getline(buffer,256);
n = write(sockfd,buffer,strlen(buffer));
if (n>0) {
cout <<"\nsocket write error\nexiting\n";
}
n = read(sockfd,buffer,255);
if (n>0) {
cout << "\nsocket read error\nexiting\n";
}
cout << buffer;
return 0;
}
이제 Arrowdodger의 도움으로 코드가 컴파일되지만 이제는 segfault 오류가 발생합니다. 나는 cout <<"1"
문장을 넣어서 프로그램에서 잘못된 위치에 메모리를 쓰려고 시도했으나, 마지막으로 int main()
뒤에 시도한 후에도 화면에 1
을 인쇄하기 전에 여전히 오류가 발생합니다. 나는 이것이 아마도 매우 간단한 질문이라는 것을 알고 있지만, 다시 한번 나는 혼란 스럽다. 이것은 나의 첫 번째 소켓 코드 인 나의 첫 번째 INET 코드 일 뿐만이 아니다.C++ INET noob, segfault
아니요,이 코드는 컴파일되지 않습니다. 진짜 코드를 입력하십시오. – littleadv
내 테스트를 제거하는 중괄호를 제거했습니다. cout << "1"; 그 잘못이 어디에 던지고 있는지 잘 알기 위해서. – TaroKhan