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传输的么 ,怎么就不能握手呢
你的socket需要解析http协议
如楼上所说,服务端给浏览器发送内容时需要包含协议头信息。(浏览器发起请求的时候也是会包含头的)
例如发送的内容(你好,博客园。):
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); }