c - 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;
}
解决方案
这可能是错误的:
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
.
推荐阅读
- pandas - 将 pandas 交叉表转换为堆叠数据框(常规表)
- python-3.x - 我可以在 KeyConditionExpression 中同时查询表和全局二级索引吗
- python - 从散点图中拟合数据
- java - 我无法让字符串拆分方法正常工作
- r - 有人可以帮我修复这个功能代码吗?
- selenium - 尝试单击输入内的标签
- utf-8 - 从桌面文件夹中解析的 10-K 中提取 MD&A 部分
- .net-core - 无法在 ARM Linux 下运行
- algorithm - 递归算法的时间复杂度两个因素
- node.js - 为什么我的 AWS Lambda 函数返回“无效 JSON”错误?