Я пишу клиентскую программу, но проблема, с которой я столкнулся: connect()
сбой означает возврат отрицательного числа. Я слежу за книгой, пытаясь написать программу на основе программирования сокетов. При запуске программы из командной строки ./out 169.1.1.1 "Hello World!!" 7
. Через некоторое время он отображает Ошибка подключения
Клиент. c Я имею в виду основной. c в моя программа
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "Practical.h"
int main(int argc, char* args[]) {
if(argc < 3 || argc > 4) { //Program will be Exit if Invalid no. of Arguments is Passed.
DieWithUserMessage("Program Arguments: ","Provide <./out, IP Address , Message and Port: 7>");
}
char * userIPAddress = args[1]; // First argument IP provide by the user separated by the . of 4 digits
char * userMessage = args[2]; // Second argument message that user want to send to the server.
in_port_t port = (argc == 4) ? atoi(args[3]) : 7; //4th argument which is : port number is optional , but if provided should convert to number.
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock < 0) {
DieWithSystemMessage("Socket Failed:");
}
//Now setting up Server Address
struct sockaddr_in servAddress;
memset(&servAddress, 0, sizeof(servAddress));
servAddress.sin_family = AF_INET;
int retValue = inet_pton(AF_INET, userIPAddress, &servAddress.sin_addr.s_addr);
if(retValue < 0) {
DieWithSystemMessage("IPv4 Conversion Failed");
}
if(retValue == 0) {
DieWithUserMessage("Invalid, Pattern", "<IP Address Patern is Wrong/Miss spelled>");
}
servAddress.sin_port = htons(port);
if(connect(sock, (struct sockaddr *)&servAddress, sizeof(servAddress)) < 0) {
DieWithSystemMessage("Connect Failed");
}
size_t messagelength = strlen(userMessage);
ssize_t numBytes = send(sock, userMessage, messagelength,0);
if(numBytes < 0) {
DieWithSystemMessage("Sending Failed");
}
if(numBytes < messagelength) {
DieWithUserMessage("Sending Incomplete", "<Greater or Less number of bytes is send>");
}
return 0;
}
DieWithMessage. c
#include <stdio.h>
#include <stdlib.h>
void DieWithUserMessage(const char* mesg, const char* details) {
fputs(mesg, stderr);
fputs(details, stderr);
fputc('\n', stderr);
exit(0);
}
void DieWithSystemMessage(const char* mesge) {
fputs(mesge, stderr);
fputc('\n', stderr);
exit(0);
}
Practical.h
void DieWithUserMessage(const char* mesg, const char* details);
void DieWithSystemMessage(const char* mesge);
Makefile
# _*_ Makefile _*_
out: main.o DieWithMessage.o Practical.h
gcc main.o DieWithMessage.o -o out
main.o: main.c
gcc main.c -c
DieWithMessage.o: DieWithMessage.c
gcc DieWithMessage.c -c
clean:
rm -f *.o out
Проблема здесь
if(connect(sock, (struct sockaddr *)&servAddress, sizeof(servAddress)) < 0) {
DieWithSystemMessage("Connect Failed");
}
Еще не завершено Я собираюсь написать код для сервера, но сначала решу эту проблему
Вывод Вывод после выполнения