使用socket通信就可以实现啦,只是不知道你要什么东西,大概是服务端 :WIN32:SOCKET s = socket(); bind(s) listen(s) SOCKET ss = accept(s);recv(ss); send(ss);客户端:WIN32:SOCKET s = socket(s);connect(s);send(s);recv(s);
//server.cpp while ( true ) { memset(RecvBuffer, 0x00, sizeof(RecvBuffer)); Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0); if ( Ret == 0 || Ret == SOCKET_ERROR ) { cout<<"客户端退出!"<<endl; break; } cout<<"接收到客户信息为:"<<RecvBuffer<<endl; }//client.cpp while ( true ) { cin.getline(SendBuffer, sizeof(SendBuffer)); Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0); if ( Ret == SOCKET_ERROR ) { cout<<"Send Info Error::"<<GetLastError()<<endl; break; } } 上面的代码只能是客户端发送信息 接收端接收信息.怎么在上面完善一些,使得双方可以互相发送信息
bind(s)
listen(s)
SOCKET ss = accept(s);recv(ss);
send(ss);客户端:WIN32:SOCKET s = socket(s);connect(s);send(s);recv(s);
while ( true )
{
memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
if ( Ret == 0 || Ret == SOCKET_ERROR )
{
cout<<"客户端退出!"<<endl;
break;
}
cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
}//client.cpp
while ( true )
{
cin.getline(SendBuffer, sizeof(SendBuffer));
Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
if ( Ret == SOCKET_ERROR )
{
cout<<"Send Info Error::"<<GetLastError()<<endl;
break;
}
}
上面的代码只能是客户端发送信息 接收端接收信息.怎么在上面完善一些,使得双方可以互相发送信息
#include <iostream>
#include <Windows.h>using namespace std;#pragma comment(lib,"ws2_32.lib")#define PORT 4000
#define IP_ADDRESS "127.0.0.1"DWORD WINAPI ClientThread(LPVOID lpParameter)
{
SOCKET CientSocket = (SOCKET)lpParameter;
int Ret = 0;
char RecvBuffer[MAX_PATH]; while ( true )
{
memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
if ( Ret == 0 || Ret == SOCKET_ERROR )
{
cout<<"客户端退出!"<<endl;
break;
}
cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
} return 0;
}int main(int argc, char* argv[])
{
WSADATA Ws;
SOCKET ServerSocket, CientSocket;
struct sockaddr_in LocalAddr, ClientAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL; //Init Windows Socket
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )//打开winsock
{
cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
return -1;
}
//Create Socket
ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//建立套接字
if ( ServerSocket == INVALID_SOCKET )
{
cout<<"Create Socket Failed::"<<GetLastError()<<endl;
return -1;
}
//初始化LocalAddr
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
// LocalAddr.sin_addr.s_addr = INADDR_ANY;
// INADDR_ANY 表示下面的函数bind函数把刚才创建的socket绑定到当前的电脑的IP地址上。
LocalAddr.sin_port = htons(PORT);//主机序转化为网络序
memset(LocalAddr.sin_zero, 0x00, 8); //Bind Socket 服务器绑定端口
Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
if ( Ret != 0 )
{
cout<<"Bind Socket Failed::"<<GetLastError()<<endl;
return -1;
} Ret = listen(ServerSocket, 10);
if ( Ret != 0 )
{
cout<<"listen Socket Failed::"<<GetLastError()<<endl;
return -1;
} cout<<"服务端已经启动"<<endl; while ( true )
{
AddrLen = sizeof(ClientAddr);
CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
if ( CientSocket == INVALID_SOCKET )
{
cout<<"Accept Failed::"<<GetLastError()<<endl;
break;
} cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<" 端口号:"<<ClientAddr.sin_port<<endl;
hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);
if ( hThread == NULL )
{
cout<<"Create Thread Failed!"<<endl;
break;
} CloseHandle(hThread);
} closesocket(ServerSocket);
closesocket(CientSocket);
WSACleanup(); return 0;
}
例如这个用tcp协议的程序 怎么把他改成双线程 一个线程监听接收 一个线程去发送信息呢?