TCP IP通訊(伺服器)

2021-05-23 14:34:52 字數 3039 閱讀 2345

首先建立對話方塊,上面含有編輯框,啟動按鈕,取消,傳送按鈕。

關聯變數接收編輯框cstring m_rxdata;傳送編輯框cstring  m_txdata;

在stdafx.h檔案中包含標頭檔案#include//include mfc sock extensions

定義巨集#define wm_client_accept wm_user+101

#define wm_client_readclose wm_user+102

並定義乙個結構體

typedef struct zymsg

msg;

在標頭檔案中定義如下變數,並定義接收函式並自己新增訊息對映

msg msg;

bool bindok;

sockaddr_in m_sockserveraddr;

socket serversocket;

socket client;

lresult onreadclose(wparam wparam,lparam lparam);

lresult onaccept(wparam wparam,lparam lparam);

原始檔中訊息對映

on_message(wm_client_accept,onaccept)

on_message(wm_client_readclose,onreadclose)

新增啟動按鈕和傳送按鈕的訊息響應

然後新增**

void cserverdlg::serverinit()  //伺服器初始化

m_rxdata+="伺服器開始建立socket";

updatedata(false);  //將變數中資料更新到編輯框

serversocket=socket(pf_inet,sock_stream,0);  //建立伺服器端socket,型別為sock_stream,面向連線的通訊 

if(invalid_socket == serversocket)

m_sockserveraddr.sin_addr.s_un.s_addr=inaddr_any; //向所有的ip位址傳送資訊

m_sockserveraddr.sin_family=af_inet;

m_sockserveraddr.sin_port=htons(8001);

//與選定的埠繫結

if(socket_error==bind(serversocket,(lpsockaddr)&m_sockserveraddr,sizeof(m_sockserveraddr)))

m_rxdata+="/n伺服器端口8001 ";

updatedata(false);  //將變數中資料更新到編輯框

//產生相應傳遞給視窗的訊息為wm_server_accept,這是自定義訊息

errorcode=wsaasyncselect(serversocket,m_hwnd,wm_client_accept,fd_accept);

if(socket_error == errorcode)

//開始監聽客戶連線請求

if(socket_error == listen(serversocket,3))

bindok=true;  //success

m_rxdata+="/n伺服器繫結監聽成功";

updatedata(false);  //將變數中資料更新到編輯框

return ;

}void cserverdlg::onstart()  //啟動

void cserverdlg::onbtnsend()  //傳送

updatedata(true);  //將編輯框中資料更新到變數

strcpy((char*)msg.msg,(lpctstr)m_txdata);  //將傳送編輯框中的資料拷貝到結構體msg中

msg.i=0; //變數清零

if(socket_error==send(client,(char*)&msg,sizeof(msg),0))  // recv(serversocket,buf,sizeof(buf),0);

else

m_txdata.empty(); //傳送編輯框清空

updatedata(false); //將變數中的值更新到編輯框

((cedit*)getdlgitem(idc_btn_send))->setactivewindow();  //

}void cserverdlg::onexit()  //退出

//自定義接收客戶機請求的訊息   on_message(wm_client_accept,onaccept)

lresult cserverdlg::onaccept(wparam wparam, lparam lparam)

if(wsagetselectevent(lparam)==fd_accept) //如果

wsaasyncselect(client,m_hwnd,wm_client_readclose,fd_read | fd_close);

bindok=true;

}m_rxdata+="/n有工作站連線!";

updatedata(false);  //將變數中資料更新到編輯框

return 0l;

//自定義的關閉與緩衝區有訊息

lresult cserverdlg::onreadclose(wparam wparam, lparam lparam)

cstring str;

switch(wsagetselectevent(lparam))

str.format("%s",msg.msg);

m_rxdata+=str;

updatedata(false);  //將變數中資料更新到編輯框

break;

case fd_close:

str=_t("/n工作站退出");

m_rxdata=str;

closesocket(client);

bindok=false;

updatedata(false);  //將變數中資料更新到編輯框

break;

}return 0l;

串列埠通訊伺服器

串列埠通訊伺服器zlan5143i的一款專門為抗雷擊 抗電磁干擾 抵抗惡劣環境要求而設計的一款高可靠性 高效能串列埠伺服器 modbus 閘道器產品,是串列埠伺服器的旗艦級產品。可以應用於隧道監控 風力發電 野外地質災害監控等需要抗干擾 抗雷擊的工業應用場合。zlan5143i具有良好的介面隔離特性...

多串列埠通訊伺服器

多串列埠通訊伺服器zlan5g00a串列埠伺服器是一款機架式 16串列埠 rs232 485 422 和tcp ip 之間協議轉化器。支援16個 rs232 串列埠 16 個rs485 rs422 串列埠,且 rs232 支援流控。通過一根網線連線到 zlan5g00a 實現16 個串列埠同時全雙工...

使用系統檔案實現socket通訊 伺服器端搭建

注意 這裡建立檔案是在xcode的osx下面的命令列建立的 因為一會客戶端使用的ios模擬器,而xcode是不能同時執行兩個模擬器的 實現socket通訊無論是客戶端還是伺服器端都需要引入四個檔案 import import import import 搭建socket通訊大致分為四個步驟 1.建立...