首页 > 解决方案 > C中从客户端到服务器的消息

问题描述

我有这样一个任务,我需要编写“客户端”代码,以便将来自“客户端”的消息发送到服务器(由我的老师创建,ip “127.0.0.1”)。消息到达服务器后(例如“Nursultan Nazarbayev”,服务器会回复“ok”,客户端应该发送“quit”)

我只是在学习C。如何与服务器断绝关系?我想发送“退出”,但这没有用,经常出现错误,我该怎么做?

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
char message[2048];//=(char*)malloc(sizeof(char));// transmission message
char buf[sizeof(message)];
int port,ch;
//----------------------------------------------------------------------------
if(argc!=3){
printf("Wrong number of arguments!\nThere must be 2 arguments (Port, server ip-address)!\n");
exit(0);
}

    int sock;                 // socket descriptor

    struct sockaddr_in addr; // structure with address
    struct hostent* hostinfo;
port = atoi(argv[1]);
hostinfo = argv[2];
    sock = socket(AF_INET, SOCK_STREAM, 0); // create TCP socket
    if(sock < 0)
    {
        perror("socket");
        exit(1);
    }

    // Specify server parameters
    addr.sin_family = AF_INET; // Internet domains
    addr.sin_port = htons(port); // or any other port ...
    addr.sin_addr.s_addr=inet_addr("hostinfo");

   // addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
      //addr.sin_addr.s_addr = inet_addr(host_ip);

 if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) // establishing a connection to the server
    {
        perror("Connection");
        exit(2);
    }

while(1){//WHILE <---
//----------------------------------------------------------------------------
    printf("Enter a message to the server (To exit: quit): "); 
    if (!strcmp(gets(message), "quit")){close(sock);return 0;}
//----------------------------------------------------------------------------

    printf("sending a message to the server...\n");
    send(sock, message, sizeof(message), 0); // sending a message to the server
    int bytes_read = 0;
    printf("Message Waiting\n");
    bytes_read = recv(sock, buf, sizeof(message), 0);
    printf("received %d bytes\tMessage: %s\n", bytes_read, buf); // receiving a message from the server

}//END_WHILE

return 0;

}

标签: c

解决方案


这可能是错误的:

addr.sin_addr.s_addr=inet_addr("hostinfo");

您正在将文字字符串传递"hostinfo"inet_addr()函数。同时,您有一个名为的变量hostinfo,您为其分配了一个字符串值,但您从未在程序的任何地方使用它。

也许您打算这样做:

addr.sin_addr.s_addr=inet_addr(hostinfo);

PS,我喜欢长的,描述性的名字。如果那是我的程序,变量的名称将类似于,server_address_as_string.


推荐阅读