Client.cpp
#include <Winsock2.h>
#include <stdio.h>
#include <string.h>
/*
客户端程序:
1、加载套接字库
2、创建套接字(socket)。
3、向服务器发出连接请求(connect)。
4、和服务器端进行通信(send/recv)。
5、关闭套接字。
*/
#pragma comment(lib, "WS2_32.lib ")
//WS2_32.lib这个库里面包含了send(),recv()等函数的实现.
//这句话是告诉编译器在链接的时候把这个库加进来
int main(int argc, char* argv[])
{
int sock;
struct sockaddr_in server;
WSADATA WSAData;
if (WSAStartup(0x0101, &WSAData)) //MAKEWORD(1,1)
{
printf("WSAStrartup\n");
exit(1);
}
/* 建立套接字 */
sock = socket(AF_INET, SOCK_STREAM, 0);
printf("opening stream socket\n");
if (sock < 0) {
exit(1);
}
/* 使用命令行中指定的名字连接套接字 */
server.sin_family = AF_INET;
server.sin_port = htons(1111);
server.sin_addr.s_addr = inet_addr("192.168.0.105");
printf("connecting .....\n");
if (connect(sock, (struct sockaddr*) & server, sizeof(server)) < 0) {
exit(3);
}
//char msg[10];
//int len, _sent;
char msgsent[1000];
char msgaccept[1000];
while (1) {
/*
printf(": ");
scanf("%s", msg);
len = strlen(msg);
_sent = send(sock, msg, len, 0);
if (_sent < 0)
perror("sending on stream socket");*/
memset(msgsent,0,1000);
memset(msgaccept, 0, 1000);
printf(": ");
gets_s(msgsent);
char enter[4] = "\r\n";
strcat(msgsent, enter);
if (send(sock, msgsent, strlen(msgsent), 0) < 0)
perror("sending on stream socket");
if (recv(sock, msgaccept, 1000, 0) != 0)
{
printf("服务器返回的字符串:%s", msgaccept);
}
else printf("服务器返回字符串出错");
}
closesocket(sock);
exit(0);
}
运行方法与运行效果
附FTP命令:
每个命令都有 3 到 4 个字母组成,命令后面跟参数,用空格分开。每个命令都以 "\r\n"结束。