TCP/IP 小試

// TCP_Server.cpp : 定義控制檯應用程序的入口點。
//


#include "stdafx.h"
#include <winsock.h>
#include <stdlib.h>


WORD RPort = 7777; // 遠程端口 RemotePort
char RIP[16] = "127.0.0.1"; // 遠程 IP地址 RemoteIPAddr
WORD LPort = 9888; // 本地端口 LocalPort
char LIP[16] = "127.0.0.1"; // 本地IP地址 LocalAddr


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 SetSockAddr (struct sockaddr_in *A, WORD Port, char *IP)
{
A->sin_family = AF_INET; // TCP/IP 協議
A->sin_port = htons(Port); // 端口 
A->sin_addr.s_addr = inet_addr(IP); // IP網址
}
//------------------------------------------------------------------------






int _tmain(int argc, char* argv[])
{
WORD v; // wVersionrequested
//---------------- Startup Win Socket --------------------------------
v = 0x0101;
r = WSAStartup(v, (LPWSADATA) &WD);
if(r != 0)
{
ShowInfo("Start_Error");
}
//---------------- Create Win Socket ---------------------------------
S = socket (PF_INET, SOCK_DGRAM, 0);
if(S == -1)
{
ShowInfo("Socket_Create_Error");
}
int l = sizeof(rAddr);
char Msg[80];
puts("Type exit then Quit Program!");
SetSockAddr(&lAddr, LPort, LIP);
r = bind(S, (struct sockaddr far *)&lAddr, sizeof(lAddr));
if(r == -1)
{
ShowInfo("bind_Error");
}

SetSockAddr(&rAddr, RPort, RIP);


do{




//--------------------- Recieve Mess ---------------------------------

r = recv (S, Msg, 80, 0);
//r = recvfrom(S, Msg, 80, 0,(struct sockaddr far *) &rAddr, &l);
if(r ==-1)
{
ShowInfo("Recieve Error");
}
Msg[r] = 0;
puts(Msg);
puts("Recieve Ok!");
//--------------------- Send Message --------------------------------
puts("Send:");
gets_s(Msg);
if(!strcmp(Msg,"exit"))
{
break;
}


r = sendto(S, Msg, strlen(Msg), 0, (struct sockaddr far *)&rAddr, l);
if(r == -1)
{
ShowInfo(" Send Error");
}
puts("Send ok! waiting Recieve...");


}while(1);
closesocket(S);
WSACleanup();


return 0;
}

// TCP_Client.cpp : 定義控制檯應用程序的入口點。
//


#include "stdafx.h"
#include <winsock.h>
#include <stdlib.h>


WORD RPort = 9888; // 遠程端口 RemotePort
char RIP[16] = "127.0.0.1"; // 遠程 IP地址 RemoteIPAddr
WORD LPort = 7777; // 本地端口 LocalPort
char LIP[16] = "127.0.0.1"; // 本地IP地址 LocalAddr


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 SetSockAddr (struct sockaddr_in *A, WORD Port, char *IP)
{
A->sin_family = AF_INET; // TCP/IP 協議
A->sin_port = htons(Port); // 端口 
A->sin_addr.s_addr = inet_addr(IP); // IP網址
}
//------------------------------------------------------------------------






int _tmain(int argc, char* argv[])
{
WORD v; // wVersionrequested
//---------------- Startup Win Socket --------------------------------
v = 0x0101;
r = WSAStartup(v, (LPWSADATA) &WD);
if(r != 0)
{
ShowInfo("Start_Error");
}
//---------------- Create Win Socket ---------------------------------
S = socket (PF_INET, SOCK_DGRAM, 0);
if(S == -1)
{
ShowInfo("Socket_Create_Error");
}
int l = sizeof(rAddr);
char Msg[80];
puts("Type exit then Quit Program!");
SetSockAddr(&lAddr, LPort, LIP);
r = bind(S, (struct sockaddr far *)&lAddr, sizeof(lAddr));
if(r == -1)
{
ShowInfo("bind_Error");
}
SetSockAddr(&rAddr, RPort, RIP);



do{
//--------------------- Send Message --------------------------------
puts("Send:");
gets_s(Msg);
if(!strcmp(Msg,"exit"))
{
break;
}


r = sendto(S, Msg, strlen(Msg), 0, (struct sockaddr far *)&rAddr, l);
if(r == -1)
{
ShowInfo(" Send Error");
}


//--------------------- Recieve Mess ---------------------------------
puts("Send ok! waiting Recieve...");
r = recv (S, Msg, 80, 0);
//
//r = recvfrom(S, Msg, 80, 0,(struct sockaddr far *) &rAddr, &l);
if(r ==-1)
{
ShowInfo("Recieve Error");
}
Msg[r] = 0;
puts(Msg);
puts("Recieve Ok!");




}while(1);
closesocket(S);
WSACleanup();


return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章