當前位置:編程學習大全網 - 編程語言 - Ipaddr編程教程

Ipaddr編程教程

上面妳給的代碼其實是?MSDN?裏面的演示代碼並不完整,只是演示了兩個函數的使用。我給妳看看我寫的東西?TCP?通訊程序,可以在同壹個局域網的兩臺不同的電腦之間聊天嗎?:

這其實是壹個網絡通信教程裏的例子,不過是我自己改寫的。這是給妳的代碼:

========================

以下是公共代碼:

========================

#ifndef?__CINITSOCK__H__

#定義?__CINITSOCK__H__

#包含?& ltwinsock2.h & gt

#包含?& ltiphlpapi.h & gt

#pragma?評論(?lib,?“ws2_32.lib”?)

#pragma?評論(?lib,?“iphlpapi.lib”?)

班級?奇尼托克

{

公共:

奇尼索克(?int?nMinorVer?=?2,?int?nMajorVer?=?2?)

{

WSADATA?wsData

詞?wVer?=?MAKEWORD(?nMinorVer,?nMajorVer?);

如果(?0?!=?WSAStartup(?不管怎樣?& ampwsData?)?)?退出(?0?);

}

~CInitSock(?)

{

WSACleanup(?);

}

};

#endif

========================

下面是客戶端的代碼?:

=======================

#包含?" CInitSock.h "

#包含?& ltiostream & gt

使用?命名空間?std

辛尼索克?g _ Sock

作廢?主(?)

{

插座?sockClient?=?插座(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?);

如果(?無效_套接字?==?sockClient?)

返回;

sockaddr_in?sockAddr

sockAddr.sin_family?=?AF _ INET

sockAddr.sin_port?=?htons(?4567?);

sockAddr.sin_addr。S_un。S_addr?=?inet_addr(?"127.0.0.1"?);

如果(?-1?==?連接(?sockClient,?(?sockaddr*?)& ampsockAddr?sizeof(?sockAddr?)?)?)

{

cout?& lt& lt?“連接?失敗"?& lt& lt?endl

返回;

}

而(?真的嗎?)

{

夏爾?szBuf[?MAX_PATH?];

零記憶(?szBuf,?sizeof(?szBuf?)?);

cout?& lt& lt?“妳?說?:?";

cin?& gt& gt?szBuf

如果(?SOCKET_ERROR?==?發送(?sockClient,?szBuf,?MAX_PATH,?0?)?)

{

cout?& lt& lt?“送?失敗"?& lt& lt?endl

返回;

}

int?nRecvLen?=?recv(?sockClient,?szBuf,?MAX_PATH,?0?);

如果(?nRecvLen?& gt?0?)

{

//?szBuf[?nRecvLen?]?=?'\0';

cout?& lt& lt?“服務?說?:?"?& lt& lt?szBuf?& lt& lt?endl?& lt& lt?endl

}

其他

{

cout?& lt& lt?“recv?失敗"?& lt& lt?endl

返回;

}

}

closesocket(?sockClient?);

}

======================

以下是服務器的代碼:

======================

#包含?" CInitSock.h "

#包含?& ltiostream & gt

使用?命名空間?std

辛尼索克?g _ Sock

作廢?主(?)

{

插座?sockClient?=?插座(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?);

如果(?無效_套接字?==?sockClient?)

返回;

sockaddr_in?sockAddr

sockAddr.sin_family?=?AF _ INET

sockAddr.sin_port?=?htons(?4567?);

sockAddr.sin_addr。S_un。S_addr?=?INADDR _ ANY

綁定(?sockClient,?(?sockaddr*?)& ampsockAddr?sizeof(?sockAddr?)?);

聽著(?sockClient,?SOMAXCONN?);

夏爾?szBuf[?MAX_PATH?];

sockaddr_in?remoteAddr

int?nLen?=?sizeof(?sockaddr_in?);

插座?襪子?=?接受(?sockClient,?(?sockaddr*?)& ampremoteAddr,?& ampnLen?);

而(?真的嗎?)

{

int?nRecvLen?=?recv(?sock?szBuf,?MAX_PATH,?0?);

如果(?nRecvLen?& gt?0?)

{

cout?& lt& lt?“客戶?說?:?"?& lt& lt?szBuf?& lt& lt?endl?& lt& lt?endl

}

零記憶(?szBuf,?sizeof(?szBuf?)?);

cout?& lt& lt?“妳?說?:?";

cin?& gt& gt?szBuf

如果(?SOCKET_ERROR?==?發送(?sock?szBuf,?MAX_PATH,?0?)?)

{

cout?& lt& lt?“送?失敗"?& lt& lt?endl

}

}

closesocket(?襪子?);

closesocket(?sockClient?);

}

希望對樓主有幫助?。

  • 上一篇:為什麽我們總是會錯過壹些機會?
  • 下一篇:有哪些C++經典書籍啊
  • copyright 2024編程學習大全網