#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;
}
Der Code kompiliert jetzt dank einiger Hilfe von Arrowdodger, aber jetzt bekomme ich segfault Fehler. Ich versuchte, eine cout <<"1"
Anweisung zu setzen, um zu sehen, wo im Programm versucht wird, Speicher an der falschen Stelle zu schreiben, aber nach dem letzten Versuch es gleich nach int main()
, wirft es immer noch den Fehler vor dem Drucken 1
auf dem Bildschirm. Ich weiß, das ist wahrscheinlich eine wirklich einfache Frage, aber ich bin wieder einmal ratlos. Dies ist nicht nur mein erster INET-Code, sondern auch mein erster Socket-Code.C++ INET nein, segfault
Nein, dieser Code würde nicht kompilieren. Setzen Sie bitte den richtigen Code. – littleadv
Ich habe wahrscheinlich die Schiene entfernt, während ich meinen Testcout << "1" entfernt habe; um hoffentlich zu sehen, wo der Fehler war. – TaroKhan