要解决全双工通信需要开两个线程,一个发送线程,要监听键盘的输入,另一个是接收线程,要监听接收队列。
c++的多线程编程问题在此不在这里叙述了,以后可能会单独写一篇总结一下。
由于是全双工通信,所以两个客户端应该是对等的关系,A的发送端口要对应于B的接收端口。比如A的发送端口是8000,接收端口是9000,那么B就应该是发送端口是9000,接收端口是8000。
两个客户端的代码如下:
// UDP-2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <iostream>
#pragma comment(lib,"WS2_32.lib")
WSADATA wsa;
DWORD WINAPI recv(LPVOID p)
{
char buf[20];
sockaddr_in addr_in;
SOCKET s;
int len;
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s == INVALID_SOCKET)
{
printf("socket failed\n");
return -1;
}
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(8000);
addr_in.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
if (bind(s, (sockaddr*)&addr_in, sizeof(sockaddr