求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,

求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,,第1张

你上面给出的代码其实就是 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 )

}

希望能够帮到楼主 。

Tcpip是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。Tcpip常被通称为TCP/IP协议族,简称TCP/IP。tcpip协议中,Tcp协议在传输层,ip协议在网际层。

TCP/IP协议是用来提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。

TCP/IP分为tcp协议和ip协议:

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。ip协议是互联网协议地址,缩写为IP地址,是分配给用户上网使用的网际协议 的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类。

扩展资料

TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议。

如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。

TCP/IP协议的基本传输单位是数据包,TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头,包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式。

IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方,如果传输过程中出现数据丢失、数据失真等情况。

TCP/IP协议数据的传输基于TCP/IP协议的四层结构,数据在传输时每通过一层就要在数据上加个包头,其中的数据供接收端同一层协议使用,而在接收端,每经过一层要把用过的包头去掉,这样来保证传输数据的格式完全一致。

参考资料来源:百度百科 -  TCP/IP协议


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12152472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存