客户端
#include
<
Winsock2.h
>
#include < stdio.h >
#include < stdlib.h >
#pragma comment (lib, " ws2_32.lib " )
// 服务器使用的端口号为5050
#define DEFAULT_PORT 5050
#define DATA_BUFFER 1024
void main()
{
WSADATA wsaData;
SOCKET sClient;
int iPort = DEFAULT_PORT;
//接收数据的缓冲
int iSend;
int iRecv;
//要发送给服务器的信息
char send_buf[1024];
//接收数据的缓冲
char recv_buf[DATA_BUFFER];
//服务器端地址
struct sockaddr_in ser;
printf("--------------------------\n");
printf("基于TCP的通信程序的客户端\n");
//提示在命令持中输入法服务器IP地址
printf("输入服务器IP:");
char ipz[32];
gets(ipz);
//char * ipz=&ip;
//接收数据的缓冲区初始化
memset(recv_buf,0,sizeof(recv_buf));
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
printf("Failed to load Winsock.\n");
return;
}
//填写要连接的服务器地址信息
ser.sin_family = AF_INET;
ser.sin_port = htons(iPort);
//inet_addr()函数将命令持的点扫IP地址转化为用二进制表示的网络顺序的IP地址
//ser.sin_addr.s_addr = inet_addr(argv[1]);
ser.sin_addr.s_addr = inet_addr(ipz);
//建立客户端流式套接口
sClient = socket(AF_INET,SOCK_STREAM,0);
if(sClient == INVALID_SOCKET)
{
printf("socket() Failed:%d\n",WSAGetLastError());
return;
}
//请求与服务器端建立TCP连接
if(connect(sClient,(struct sockaddr*)&ser,sizeof(ser)) == INVALID_SOCKET)
{
printf("connect() Failed.:%d\n",WSAGetLastError());
return;
}
else
{
printf("建立TCP连接成功!\n");
printf("--------------------------\n");
//进入一个无限循环,与服务器交互
while(1){
//向服务器发送数据
printf("发送消息:");
gets(send_buf);
iSend = send(sClient,send_buf,sizeof(send_buf),0);
if(iSend == SOCKET_ERROR)
{
printf("send() Failed:%d\n,WSAGetLastError()");
return;
}
else if(iSend == 0)
return;
else
printf("发送成功.\n");
//从服务器端接收数据
iRecv = recv(sClient,recv_buf,sizeof(recv_buf),0);
if(iRecv == SOCKET_ERROR)
{
printf("recv() Failed:%d\n",WSAGetLastError());
return;
}
else if(iRecv == 0)
return;
else
{
//显示从服务器收到的信息
printf("服务器说:%s\n",recv_buf);
printf("--------------------------\n");
}
}
}
closesocket(sClient);
WSACleanup();
}
#include < stdio.h >
#include < stdlib.h >
#pragma comment (lib, " ws2_32.lib " )
// 服务器使用的端口号为5050
#define DEFAULT_PORT 5050
#define DATA_BUFFER 1024
void main()
{
WSADATA wsaData;
SOCKET sClient;
int iPort = DEFAULT_PORT;
//接收数据的缓冲
int iSend;
int iRecv;
//要发送给服务器的信息
char send_buf[1024];
//接收数据的缓冲
char recv_buf[DATA_BUFFER];
//服务器端地址
struct sockaddr_in ser;
printf("--------------------------\n");
printf("基于TCP的通信程序的客户端\n");
//提示在命令持中输入法服务器IP地址
printf("输入服务器IP:");
char ipz[32];
gets(ipz);
//char * ipz=&ip;
//接收数据的缓冲区初始化
memset(recv_buf,0,sizeof(recv_buf));
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
printf("Failed to load Winsock.\n");
return;
}
//填写要连接的服务器地址信息
ser.sin_family = AF_INET;
ser.sin_port = htons(iPort);
//inet_addr()函数将命令持的点扫IP地址转化为用二进制表示的网络顺序的IP地址
//ser.sin_addr.s_addr = inet_addr(argv[1]);
ser.sin_addr.s_addr = inet_addr(ipz);
//建立客户端流式套接口
sClient = socket(AF_INET,SOCK_STREAM,0);
if(sClient == INVALID_SOCKET)
{
printf("socket() Failed:%d\n",WSAGetLastError());
return;
}
//请求与服务器端建立TCP连接
if(connect(sClient,(struct sockaddr*)&ser,sizeof(ser)) == INVALID_SOCKET)
{
printf("connect() Failed.:%d\n",WSAGetLastError());
return;
}
else
{
printf("建立TCP连接成功!\n");
printf("--------------------------\n");
//进入一个无限循环,与服务器交互
while(1){
//向服务器发送数据
printf("发送消息:");
gets(send_buf);
iSend = send(sClient,send_buf,sizeof(send_buf),0);
if(iSend == SOCKET_ERROR)
{
printf("send() Failed:%d\n,WSAGetLastError()");
return;
}
else if(iSend == 0)
return;
else
printf("发送成功.\n");
//从服务器端接收数据
iRecv = recv(sClient,recv_buf,sizeof(recv_buf),0);
if(iRecv == SOCKET_ERROR)
{
printf("recv() Failed:%d\n",WSAGetLastError());
return;
}
else if(iRecv == 0)
return;
else
{
//显示从服务器收到的信息
printf("服务器说:%s\n",recv_buf);
printf("--------------------------\n");
}
}
}
closesocket(sClient);
WSACleanup();
}