首先是這個在線HTTP介面測驗工具 https://getman.cn/AJzpc
然后是我下面寫的WINFORM代碼
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Threading;
using System.Net.Sockets;
using System.Diagnostics;
namespace myInitialProject
{
public partial class Form2 : Form
{
Thread serverThread;
Thread clientThread;
Socket serverSocket;
private byte[] result = new byte[1024];
//Socket clientSocket;
public Form2()
{
InitializeComponent();
}
public void ServerStart()
{
listBoxInfo.Items.Add("Server Start...");
string host = "127.0.0.1"; // Form1就通過IPAddress.Any去定義
int nPort = 10000;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Parse(host), nPort));
serverSocket.Listen(10);
serverThread = new Thread(ListenClientConnect); // 監聽客戶端
serverThread.Start();
}
/// <summary>
/// 監聽客戶端連接
/// </summary>
public void ListenClientConnect()
{
while (true)
{
Socket clientSocket = serverSocket.Accept();
//clientSocket.Send(Encoding.UTF8.GetBytes("已連接服務器"));
Thread receiveThread = new Thread(ReceiveMessage);
//設定為后臺執行緒,隨著主執行緒退出而退出
receiveThread.IsBackground = true;
receiveThread.Start(clientSocket);
}
}
/// <summary>
/// 接收資訊
/// </summary>
/// <param name="clientSocket"></param>
public void ReceiveMessage(object clientSocket)
{
Socket myClientSocket = (Socket)clientSocket;
byte[] data = new byte[1024];
int nReceiveNumber;
byte[] tempData = new byte[1024 * 2]; // 瀏覽器發來的資料
int reciverNumber = myClientSocket.Receive(tempData);
string tempStr = Encoding.UTF8.GetString(tempData, 0, reciverNumber);
string resdata = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " server request time:" + 0;
byte[] body = Encoding.UTF8.GetBytes(resdata);
byte[] head = Encoding.UTF8.GetBytes(@"HTTP/1.1 200 OK
Content-Length: " + body.Length + @"
Content-Type: text/plain
Date: " + string.Format("{0:R}", DateTime.Now) + @"
Server: Cftea Web Server" + resdata);
StringBuilder sb = new StringBuilder();
sb.Append("HTTP/1.1 200 OK\r\n");
sb.Append("Content-Type: text/plain\r\n");
sb.Append("\r\n");
sb.Append("測驗回傳的資料\r\n");
byte[] responseData = Encoding.UTF8.GetBytes(sb.ToString());
myClientSocket.Send(responseData);
myClientSocket.Close();
/*while (true)
{
try
{
// 接收資料
nReceiveNumber = myClientSocket.Receive(result);
if (nReceiveNumber == 0)
{
return;
}
string strMessage = Encoding.UTF8.GetString(result, 0, nReceiveNumber);
// 這里列印出客戶端發送回來的訊息
Trace.WriteLine("接收到的回傳資訊:" + myClientSocket.RemoteEndPoint.ToString() + " " + strMessage);
// 發送回客戶端
//string strWelcome = "已連接上服務器";
// 取得字串的位元組序列
//data = Encoding.UTF8.GetBytes(strWelcome);
//myClientSocket.Send(data, data.Length, SocketFlags.None);
// 短連接 發送完關閉SOCKET
//myClientSocket.Close();
if (myClientSocket.Connected)
{
// 判斷客戶端是否已關閉
// 此方法不能檢測某些型別的連接問題,
// 例如,網路電纜中斷或遠程主機意外關閉。您必須嘗試發送或接收資料以檢測這些型別的錯誤。
if (myClientSocket.Poll(0, SelectMode.SelectRead))
{
{
//if (nRead == 0)
{
myClientSocket.Close();
MessageBox.Show("客戶端已關閉");
break;
}
}
}
else
{
MessageBox.Show("客戶端未關閉");
}
}
}
catch (System.Exception ex)
{
MessageBox.Show("server listening Error: " + ex.Message);
// 禁止發送和上傳
//myClientSocket.Shutdown(SocketShutdown.Both);
// if(myClientSocket.Poll(-1, SelectMode.SelectRead))
// {
// byte[] judgeData = new byte[1];
// int nRead = myClientSocket.Receive(judgeData, SocketFlags.Peek);
// if(nRead != 0)
// myClientSocket.Close();
// }
break;
}
}*/
}
/// <summary>
/// 監聽按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnListen_Click(object sender, EventArgs e)
{
ServerStart();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
if (serverSocket != null)
{
serverSocket.Close();
}
if (serverThread != null)
{
// Thread物件有個IsBackground屬性,設定為true即可,在主執行緒關閉時,子執行緒隨之關閉
serverThread.IsBackground = true;
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
這段代碼用這個在線測驗工具是沒通過,總是這樣的結果

但我用POSTMAN做本地測驗是可以通過的啊

也試過放到別人服務器上去測驗,也是不行,

按道理來說不是本地測驗通過,就行了嗎? 為什么真正放服務器上跑就不行呢?
這到底是什么原因? 請各位賜教!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/55983.html
標籤:網絡通信
上一篇:VOIP基本概念與技術講解下載
