bbs.classic023.com:vc中实现TCP UDP消息互传

来源:百度文库 编辑:神马品牌网 时间:2024/05/06 06:25:33
程序分四步:1.在客户端用TCP连接服务器
2.客户端通过UDP发送消息至服务器
3.服务器通过UDP回传客户端发送的消息
4.服务器通过TCP回传客户端发送消息的字数.
参考程序:
客户端:// client.cpp
//#include "stdafx.h"
#include <windows.h>
#include <stdio.h >
#include <winsock.h> //by user
#include <stdlib.h> //by user
#pragma comment(lib,"wsock32")
WORD RPort = 6666; //远程端口RemotePort
char RIP[16]="127.0.0.1";//远程IP地址RemoteIPAddr
WORD LPort = 7777; //本地端口LocalPort
SOCKET S; //套接口SOCKET
struct sockaddr_in rAddr; //远程参数,remoteAddr
struct sockaddr_in lAddr; //本地参数,localAddr
WSADATA WD; //WinSock DLL信息
int r; //result;
void ShowInfo(char *info)
{ puts(info); exit(1); }

void main()
{//-- - - Startup Win Socket - - - - - - - -
WORD v=0x0101; //0x0101 for v1.1, 0x0002 forv 2.0,wVersionRequested
r = WSAStartup(v, (LPWSADATA)&WD);
if(r != 0) {ShowInfo("Start_Error");return;}

//-- -- - Create Win Socket - - - - - - - -
S = socket(AF_INET, SOCK_STREAM, 0);
if(S==-1) ShowInfo("Socket_Create_Error");
//puts("Type Bye then Quit Program!");

/*
lAddr.sin_family = AF_INET; //TCP/IP协议
lAddr.sin_port = htons(LPort); //端口。
lAddr.sin_addr.s_addr =htonl(INADDR_ANY); //IP网址
*/
//======bind()用的是本地socket名,而connect()用的是服务器的socket名=========
//==================填写服务器socket的地址信息=====================
rAddr.sin_family = AF_INET; //TCP/IP协议
rAddr.sin_port = htons(RPort); //端口。
rAddr.sin_addr.s_addr =inet_addr(RIP); //IP网址
if(connect(S ,(sockaddr*)&rAddr,sizeof(sockaddr))==-1)//SOCKET_ERROR
{closesocket(S);
return;
}

do{
char Msg[80]={0};
//-- - - - - - Send Message - - - - - - - -
puts("Send:");
gets( Msg);
if(!strcmp(Msg,"Bye"))
{puts("EXIT NOW!");
closesocket(S);
WSACleanup( ); //注销,卸载windows sockets DLL
exit(1);
// return;
}
r = send(S,Msg,strlen(Msg)+1,0);
if(r == -1) ShowInfo("Send_Error");

//-- - - - - Recieve Message - - - - - - - -
puts("Send ok! Waiting Recieve...");
r = recv(S, Msg, 80,0);
if(r == -1) ShowInfo("Recieve_Error!!");
puts( Msg);
puts("Recieve ok!");
}while(1);

closesocket(S);
WSACleanup();
}
服务器:
// SERVER.cpp
//#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <winsock.h> //by user
#include <stdlib.h> //by user
#pragma comment(lib,"wsock32") //WINSOCK标准定义的DLL接口
//两个工程添加到一个工作区,要链接一个ws2_32.lib的库文件
WORD LPort = 6666; //本地端口LocalPort
char LIP[16]="127.0.0.1"; //本地IP地址LocalIPAddr
SOCKET S; //套接口SOCKET
SOCKET sockConn;//accept()建立的用于通信的socket
struct sockaddr_in rAddr; //远程参数,remoteAddr
struct sockaddr_in lAddr; //本地参数,localAddr
WSADATA WD; //WinSock DLL信息,wVersion是其一成员
int r; //result;
int len=sizeof(sockaddr);//

void main()
{ //-- - - Startup Win Socket - - - - - - - -
WORD v=0x0101; //0x0101 for v1.1, 0x0002 for v 2.0,wVersion Requested

r = WSAStartup(v, (LPWSADATA)&WD);//加载和初始化套接字库,并检查版本匹配
if(r != 0)
{ puts("Start_Error!");
exit(1);
}

//-- - - Create Win Socket - - - - - - - -

占个座先.晚上回答你的问题.现在要去图书馆找资料了


学习一下