首页 新闻 会员 周边 捐助

C# socket绑定服务端端口 如何使用网页通过 IP和端口进行访问?

0
[待解决问题]
   int port = 6000;
            string host = "127.0.0.1";

            IPAddress ip = IPAddress.Parse(host);
            //IPEndPoint ipe = new IPEndPoint(ip, port);
            TcpListener listener = new TcpListener(ip, port);
            listener.Start();
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket = listener.AcceptSocket();
            if (socket.Connected)
            {
                string sendMsg ="连上了";
                byte[] ToSend = System.Text.Encoding.UTF8.GetBytes(sendMsg.ToCharArray());
                try
                {
                    socket.Send(ToSend);
                   
                }
                catch
                {
                   
                }


            }

这样绑定 本地端口 没有问题,使用connect连接也可以,但是 使用ip和端口在网页上访问,为什么socket没反应 ,C++ 都可以这样使用,C# 不行吗,网页使用http协议,http协议不也是通过tcp传输的么 ,怎么就不能握手呢

高软玩家的主页 高软玩家 | 菜鸟二级 | 园豆:217
提问于:2017-09-14 17:41
< >
分享
所有回答(2)
0

你的socket需要解析http协议

519740105 | 园豆:5810 (大侠五级) | 2017-09-14 19:34
0

如楼上所说,服务端给浏览器发送内容时需要包含协议头信息。(浏览器发起请求的时候也是会包含头的)

例如发送的内容(你好,博客园。):

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 21

你好,博客园。

头和内容需要有一个换行符。

 

附上部分简陋的code:

        void Send(Socket client, string content)
        {
            client.Send(GetSendBuffer(content));
        }

        byte[] GetSendBuffer(string content)
        {
            string head = @"HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: {0}

{1}";
            var contentLength = Encoding.UTF8.GetByteCount(content);
            var headAndContent = string.Format(head, contentLength, content);
            return Encoding.UTF8.GetBytes(headAndContent);
        }

 

junio.cn | 园豆:445 (菜鸟二级) | 2017-09-16 23:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册