为什么客户端/服务器机制(使用套接字的)不起作用? [英] Why client/server mechanism (using socket's) doesn't work?

查看:101
本文介绍了为什么客户端/服务器机制(使用套接字的)不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在www.pythonanywhere.com上有免费帐户。我有一个用c ++编写的服务器

I have free account on www.pythonanywhere.com. I have a server written on c++

some_space::socket_server::socket_server(unsigned int port):
     m_port(port),
     m_tcp_fd(0),
     m_udp_fd(0),
     m_newfd(0)
 {
     m_addr.sin_family = AF_INET;
     m_addr.sin_addr.s_addr = htonl(INADDR_ANY);
     m_addr.sin_port = htons(m_port);
 }

 void some_space::socket_server::set_port(unsigned int port)
 {
     assert(port != 0);
     m_port = port;
 }

 int some_space::socket_server::create_tcp_connection()
 {
         m_tcp_fd = socket(AF_INET, SOCK_STREAM, 0); 
         if(m_tcp_fd < 0) {
             perror("Error: Cannot set up the communication");
             return -1; 
         }   
         int status = bind(m_tcp_fd, (struct sockaddr *)&m_addr, sizeof(m_addr));       if(status < 0) {
             perror("Error: Cannot set up the communication");
             return -1;
         }
         status = listen(m_tcp_fd, 5);
         if(status == 0) {
             m_newfd = accept(m_tcp_fd, (struct sockaddr*)NULL, NULL);// ####################### The code freezes here (on the accept)
             if(m_newfd != -1) {
                 return m_newfd;
             }
             perror("Error: Cannot accept the connection");
             return -1;
         }
         perror("Error: The port cannot be listened");
         return -1;
     }

其中 m_port = 9999
此鳕鱼运行在.pythonanywhere.com服务器终端上。

Where m_port = 9999 This cod is runed on .pythonanywhere.com server terminal.

在主体中。

    some_space::socket_server* s = new some_space::socket_server(9999);
     assert(s != 0);
     int r = s->create_tcp_connection(); // it it freezes in this function
     assert(r != -1);
     std::string rsp("");
     s->recv_response(rsp);
     std::string rec("some data");
     const char* t = rec.c_str();
     char* buf = const_cast<char*>(t);
     int size = rec.length();
     r = s->send_data(buf, size);
     assert(r != -1);*/
.......................

此外,我在本地计算机上有一个用python编写的客户端程序。

Also, I have a client program in my local pc written on python.

#!/usr/bin/env python

 import socket

 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     
 sock.connect(('<username>.pythonanywhere.com', 9999))
 sock.send('hello, world!')     
 data = sock.recv(1024)     
 print "receive >>> %s" % data     
 sock.close()

但是问题是客户端无法与服务器连接,它总是等待。哪里有问题?

But the problem is the client can't connect with the server, it waits always. Where is a problem?

推荐答案

PythonAnywhere开发人员在这里:PythonAnywhere仅支持使用Python WSGI协议的Web应用程序,该协议几乎涵盖了所有内容主要的Python网络框架(Django,web2py,Flask,Bottle等),但不能与您自己的基于C的服务器一起使用。

PythonAnywhere dev here: PythonAnywhere only supports web apps using the Python WSGI protocol, which covers almost all of the main Python web frameworks (Django, web2py, Flask, Bottle, etc) but won't work with your own C-based server.

这篇关于为什么客户端/服务器机制(使用套接字的)不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆