// Client.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <string>
using namespace std;
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#define BUF_SIZE 64
int main(int argc, char* argv[])
{
WSADATA wsd; //WSADATA變量
SOCKET sHost; //服務器Socket
SOCKADDR_IN servAddr; //服務器地址
char buf[BUF_SIZE]; //接收數據緩衝區
int retVal; //返回值
char str[64];
char IP_char[17];
cout << "please key in IP:";
cin >> IP_char;
cout << "\n"; //換行
//初始化Socket動態庫
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {
cout << "WSAStartup failed!\n";
return -1;
}
//創建Socket
sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(INVALID_SOCKET == sHost) {
cout << "socket failed!\n";
WSACleanup();//釋放Socket資源
return -1;
}
;
//設置服務器地址
servAddr.sin_family =AF_INET;
servAddr.sin_addr.s_addr = inet_addr(IP_char);
servAddr.sin_port = htons((short)4999);
int nServAddlen = sizeof(servAddr);
//連接服務器
retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));
if(SOCKET_ERROR == retVal) {
cout << "connect failed!\n";
closesocket(sHost); //關閉Socket
WSACleanup(); //釋放Socket資源
system("pause");
return -1;
}
//cout << "you are connecting " << IP_char << " \n";
while(1) {
ZeroMemory(str, BUF_SIZE);
cout << "you key in :";
cin.getline(str, BUF_SIZE);
//向服務器發送數據
ZeroMemory(buf, BUF_SIZE);
strcpy_s(buf, str);
retVal = send(sHost, buf, strlen(buf), 0);
if (SOCKET_ERROR == retVal) {
cout << "send failed!\n";
closesocket(sHost); //關閉Socket
WSACleanup(); //釋放Socket資源
system("pause");
return -1;
}
cout <<"server echo : ";
retVal = recv(sHost, buf, BUF_SIZE, 0);
cout << buf << endl; //輸出由Server端傳送的字串
if (!strcmp(buf,"bye")) break;
}
//退出
closesocket(sHost); //關閉Socket
WSACleanup(); //釋放Socket資源
system("pause");
return 0;
}