當前位置:編程學習大全網 - 編程語言 - 求C語言高手,實現壹個簡單的TCPIP程序以實現兩臺計算機之間的聊天通信,

求C語言高手,實現壹個簡單的TCPIP程序以實現兩臺計算機之間的聊天通信,

妳上面給出的代碼其實就是?MSDN?裏面的演示代碼,不過不完整,只演示了兩個函數的使用,我給妳看看我寫的?TCP?通訊程序,可以在同壹個局域網內的兩臺不同計算機之間聊天?:

這其實就是某本將網絡通訊的教程裏面的例子,不過是我自己重寫了壹遍,下面給妳代碼:

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

下面是公***代碼:

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

#ifndef?__CINITSOCK__H__

#define?__CINITSOCK__H__

#include?<winsock2.h>

#include?<iphlpapi.h>

#pragma?comment(?lib,?"ws2_32.lib"?)

#pragma?comment(?lib,?"iphlpapi.lib"?)

class?CInitSock

{

public:

CInitSock(?int?nMinorVer?=?2,?int?nMajorVer?=?2?)

{

WSADATA?wsData;

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

if(?0?!=?WSAStartup(?wVer,?&wsData?)?)?exit(?0?);

}

~CInitSock(?)

{

WSACleanup(?);

}

};

#endif

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

下面是客戶端的代碼?:

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

#include?"CInitSock.h"

#include?<iostream>

using?namespace?std;

CInitSock?g_Sock;

void?main(?)

{

SOCKET?sockClient?=?socket(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?);

if(?INVALID_SOCKET?==?sockClient?)

return;

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"?);

if(?-1?==?connect(?sockClient,?(?sockaddr*?)&sockAddr,?sizeof(?sockAddr?)?)?)

{

cout?<<?"connect?failed"?<<?endl;

return;

}

while(?true?)

{

char?szBuf[?MAX_PATH?];

ZeroMemory(?szBuf,?sizeof(?szBuf?)?);

cout?<<?"You?Say?:?";

cin?>>?szBuf;

if(?SOCKET_ERROR? ==?send(?sockClient,?szBuf,?MAX_PATH,?0?)?)

{

cout?<<?"send?failed"?<<?endl;

return;

}

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

if(?nRecvLen?>?0?)

{

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

cout?<<?"Service?Say?:?"?<<?szBuf?<<?endl?<<?endl;

}

else

{

cout?<<?"recv?failed"?<<?endl;

return;

}

}

closesocket(?sockClient?);

}

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

下面是服務端的代碼:

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

#include?"CInitSock.h"

#include?<iostream>

using?namespace?std;

CInitSock?g_Sock;

void?main(?)

{

SOCKET?sockClient?=?socket(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?);

if(?INVALID_SOCKET?==?sockClient?)

return;

sockaddr_in?sockAddr;

sockAddr.sin_family?=?AF_INET;

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

sockAddr.sin_addr.S_un.S_addr?=?INADDR_ANY;

bind(?sockClient,?(?sockaddr*?)&sockAddr,?sizeof(?sockAddr?)?);

listen(?sockClient,?SOMAXCONN?);

char?szBuf[?MAX_PATH?];

sockaddr_in?remoteAddr;

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

SOCKET?sock?=?accept(?sockClient,?(?sockaddr*?)&remoteAddr,?&nLen?);

while(?true?)

{

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

if(?nRecvLen?>?0?)

{

cout?<<?"Client?Say?:?"?<<?szBuf?<<?endl?<<?endl;

}

ZeroMemory(?szBuf,?sizeof(?szBuf?)?);

cout?<<?"You?Say?:?";

cin?>>?szBuf;

if(?SOCKET_ERROR?==?send(?sock,?szBuf,?MAX_PATH,?0?)?)

{

cout?<<?"send?failed"?<<?endl;

}

}

closesocket(?sock?);

closesocket(?sockClient?);

}

希望能夠幫到樓主?。

  • 上一篇:寫作文用卡紙制作家具的過程
  • 下一篇:想學計算機應該選什麽專業?
  • copyright 2024編程學習大全網