如何在socket编程c++中显示示例文本
how to display sample text in socket programming c++
我得到了一个程序,该程序为给定的端口号创建一个套接字。我需要显示一个hello world文本,而它是在浏览器中访问,如果端口是8080,而访问我需要显示一个hello world文本使用c++食物:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
void error(const char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
fprintf(stderr,"ERROR, no port providedn");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
error("ERROR on accept");
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0) error("ERROR reading from socket");
printf("Here is the message: %sn",buffer);
n = write(newsockfd,"I got your message",18);
if (n < 0) error("ERROR writing to socket");
close(newsockfd);
close(sockfd);
return 0;
}
当你用http://开始URL时,Web浏览器会讨论HTTP,所以你的服务器也需要讨论HTTP。
浏览器通常会发送
GET / HTTP/1.1
Host: my_website
Header1: blah blah
Header2: blah blah
请求以回车换行(LN)结束,CR LN
然后你需要创建你的回复,类似于
HTTP/1.1 200 OK
Content-Length: 11
Content-Type: text/plain
Hello World
空白行所有新行都有CRLN
正如其他人提到的,您可能需要做一些事情来确保您的读取不会阻塞您的服务器。
您的代码不会这样做。它会在'read(newsockfd..)直到它得到浏览器不会发送的输入。
看起来你已经复制了一些套接字服务器示例。对于相应的客户端示例,它可能没问题,但对于浏览器则不行。
如果浏览器中的页面应该显示"Hello World!"那么就写"I got your message"而不是"I got your message"。
你的例子可以工作。编译,运行
g++ socket.cpp
./a.out 8080
让你的浏览器指向它:
firefox http://localhost:8080
浏览器应该显示:I got your message
注意:这个例子来自linuxhowtos.org。向人们指出这一点也可以帮助他们推断问题。
相关文章:
- 尝试使用 WinBGI 显示文本时出现编译器错误
- 动态填充的组合框不显示文本,列表未定义
- QTreeWidgetItem 突出显示文本问题
- 如何通过单击按钮在QTextEdit中显示文本?
- 在C Windows程序中显示文本文件内容
- findChild 从不显示文本浏览器
- C 在同一行中左右显示文本
- 使用 C++ 中的向量在新行上显示文本文件中的列
- 如何使用 Opengl 库显示文本文件中的 3D 点
- Qt. 方法显示文本() 如果我在 QStyledItemDelegate 中定义了 paint() 方法不起作用
- 如何在C 中的OpenGL中通过矩形显示文本
- 如何使用键盘输入和sf ::文本在SFML中添加一种文本框以显示文本字符串
- QMessageBox:无法在框中显示文本(使用 c++)
- 延迟窗口在 MFC 上显示文本
- Visual Studio代码集成的终端未显示文本
- SFML-不显示文本
- qprogressdialog未显示文本标签
- C++程序无法正确显示文本文件中的内容
- 如何在不显示文本的情况下分配Win32编辑控件的窗口名称
- SDL2 OpenGL SDL2_TTF:显示文本