• 大小: 337KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: C/C++
  • 标签: socket  c++  

资源简介

c++实现的双向通信的socket小程序,如果自己实现界面可做一个简易的聊天程序

资源截图

代码片段和文件信息

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

#include 
#include  //Socket的函数调用 
#include 

#define BUF_SIZE 6400

#pragma comment (lib “ws2_32“) // 使用WINSOCK2.H时,则需要库文件WS2_32.LIB

DWORD WINAPI Rcv( LPVOID lpParam )
{
SOCKET sHost = *(SOCKET*)lpParam;
int retVal;
char bufRecv[BUF_SIZE]; 
memset( bufRecv 0 sizeof( bufRecv ) );
while(1)
{
retVal = recv( sHost bufRecv BUF_SIZE 0 );
if ( retVal == SOCKET_ERROR ) {
printf( “recive faild!\n“ );
break;
} else {
printf( “收到服务器消息:%s\n“ bufRecv );

}
return 0;
}

DWORD WINAPI Snd( LPVOID lpParam )
{
SOCKET sHost = *(SOCKET*)lpParam;
int retVal;
char bufSend[BUF_SIZE]; 
memset( bufSend 0 sizeof( bufSend ) );
while(1)
{
gets( bufSend );
retVal = send( sHost bufSend strlen(bufSend)+sizeof(char) 0 );
if ( retVal == SOCKET_ERROR ) {
printf( “send faild!\n“ );
break;

}
return 0;
}

int main(int argc char* argv[])
{
WSADATA wsaData;
if ( WSAStartup( MAKEWORD(22) &wsaData ) != 0 ) {
printf( “Winsock load faild!\n“ );
return 1;
}

//  服务器套接字 
SOCKET sHost = socket( AF_INET SOCK_STREAM IPPROTO_TCP );
if ( sHost == INVALID_SOCKET ) {
printf( “socket faild!\n“ );
WSACleanup();
return -1;
}

SOCKADDR_IN servAddr;
servAddr.sin_family = AF_INET;
//  注意   当把客户端程序发到别人的电脑时 此处IP需改为服务器所在电脑的IP 
servAddr.sin_addr.S_un.S_addr = inet_addr( “127.0.0.1“ );
servAddr.sin_port = htons( 9999 );

//  连接服务器
if ( connect( sHost (LPSOCKADDR)&servAddr sizeof( servAddr ) ) == SOCKET_ERROR ) {
printf( “connect faild!\n“ );
closesocket(sHost);
WSACleanup();
return -1;

printf(“连接到服务器 IP:[%s]port:[%d]\n“inet_ntoa(servAddr.sin_addr)ntohs(servAddr.sin_port));

HANDLE hThread1 hThread2;
DWORD dwThreadId1 dwThreadId2;

hThread1 = ::CreateThread( NULL NULL Snd (LPVOID)&sHost 0 &dwThreadId1 );
hThread2 = ::CreateThread( NULL NULL Rcv (LPVOID)&sHost 0 &dwThreadId2 );

::WaitForSingleobject( hThread1 INFINITE );
::WaitForSingleobject( hThread2 INFINITE );
::CloseHandle(hThread1);
::CloseHandle(hThread2);


closesocket(sHost);
WSACleanup(); 
return 0;
}


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     554103  2017-06-05 18:58  client.exe

     文件       3003  2017-06-05 18:58  server.cpp

     文件     555019  2017-06-05 18:58  server.exe

     文件       2348  2017-06-05 18:58  client.cpp

----------- ---------  ---------- -----  ----

              1114473                    4


评论

共有 条评论