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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,相关的知识,希望对你有一定的参考价值。

功能要求:
1)两个程序,分别是客户端和服务器端
2)可以在客户端或服务器端输入文本信息,回车后将文本信息传输到对端,文本显示在对端屏幕上。
3)服务器可以与一个或多个客户端连接

要求:
1)使用C或C++语言
2)利用TCP socket 实现
3)可以在windows 或 Linux/unix下调试
4)不做界面,直接用显示在console 窗口上
5)必须有足够的注释

老师给了结构// tcpsever.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <winsock2.h>
#include <stdio.h>

void _tmain(int argc, _TCHAR* argv[])

WSADATA wsaData;

int Port = 5150;
int Ret;

// Initialize Winsock version 2.2

if ((Ret = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)

// NOTE: Since Winsock failed to load we cannot use WSAGetLastError
// to determine the error code as is normally done when a Winsock
// API fails. We have to report the return status of the function.

printf("WSAStartup failed with error %d\n", Ret);
return;


WSACleanup();


// tcpsample.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>

void _tmain(int argc, _TCHAR* argv[])

WSADATA wsaData;

int Ret;

// Initialize Winsock version 2.2

if ((Ret = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)

// NOTE: Since Winsock failed to load we cannot use WSAGetLastError
// to determine the error code as is normally done when a Winsock
// API fails. We have to report the return status of the function.

printf("WSAStartup failed with error %d\n", Ret);
return;


感激不尽啊

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

 

 

希望能够帮到楼主 。

 

参考技术A 哥们你电气几班的啊。。

以上是关于求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,的主要内容,如果未能解决你的问题,请参考以下文章

求 高手 C语言 数组和数组之间能直接赋值吗

用C语言编写的这个链表程序可以运行,但是在运行中查找不到给定值的节点, 求高手帮忙改一下,谢谢

用C语言写一个程序实现以下功能

求一个C语言实现的种子填充多边形算法程序

c语言,build过不了,主要是设计一个函数process。在调用它的时候,每次实现不同的功能。求高手指点!

急!高分悬赏!求c语言高手!!!二叉树输入中如何判断输入是不是合法?