我有一個服務器和一個客戶端應用程序,我的服務器偵聽端口10015和一個客戶端發送命令到該端口。目前兩者都運行在同一臺機器上,但將來的目標將是在不同的機器上運行。我現在有這部分工作。服務器和客戶端是否可以在同一個端口上啓動通信併發送命令?
接下來我需要做的是讓我的服務器向我的客戶端發送命令。所以我想我可以重新使用我的客戶端服務器中的代碼來監聽端口。
但我不確定這是做到這一點的最佳方法。建議?
當我第一次嘗試這個時,我首先運行了我的客戶端應用程序,並將命令發送給自己。我的服務器應用程序未能綁定到端口(我假設您只能有一個進程在偵聽給定端口?)
問題1) 服務器如何向客戶端發送命令?我必須創建使端口10015上的服務器 - >客戶端通信和客戶端---> 10016上的其他端口上的服務器通信嗎?
問題2) 當我使用send()從客戶端 - >服務器發送命令時,接收特定命令的ACK的最佳方式是什麼?如果我不需要發回任何數據,有沒有辦法在服務器收到數據包時自動獲得ACK?
我目前做這行我要發送的每一個命令:
create socket()
conenct() to socket
send() packet
then call recv() to receive any data
then shutdown() connection
and closesocket() at end
無法確定是否有更好的方法來做到這一點?當我的應用程序忙時,我希望每秒發送1-10個命令。
謝謝,我是新來的這個網絡應用程序,所以任何幫助,非常感謝。
在閱讀完一些評論後編輯:
我正在使用TCP協議。當我說ACK時,我的意思是我只是想從其他應用程序得到一些確認,說明命令已被接收和處理,沒有錯誤
是的,只有一個進程可以同時綁定和偵聽TCP地址+端口。那麼你有兩個想要交換數據的程序?除非我錯過了任何東西,否則您可以使用一個套接字並雙向發送數據。 – IanNorton 2011-05-05 19:06:13
你能說出你有什麼協議嗎?如果這確實是TCP,那麼你不需要發送和接收ACK消息。 – IanNorton 2011-05-05 19:09:32
如果打開TCP/IP網絡套接字,則不需要關閉連接,請將其保持打開狀態。服務器和客戶端可以互相發送消息。你提到ACK,你會寫一個HL7接口嗎? – 2011-05-05 19:09:36