基于TCP的ECHO程序
服务器端代码:
转载请说明出处
自己当场手输的文字 勿喷
内容:
所谓echo,就是服务器把它所收到的数据原封不动地回送给客户端。
流程:
1.客户端向服务器发送字符串“Hello world!”;
2.服务器收到后,显示客户端的地址和端口,并把收到的数据回送给客户端;
3.客户端收到回送的数据后显示出来。
要求:
完成TCP的客户、服务器程序;
服务器的固定端口号为20000。
具体原理不想写了因为实验报告是手写的 不是电子档
这个老师很特别 大家都这么说
具体代码:
客服端代码:
#pragma comment(lib,"ws2_32.lib")
#include<Winsock2.h>
#include<stdio.h>
#include<string.h>
#include<memory.h>
int main()
{
WSAData wsaData;
int err=WSAStartup(WINSOCK_VERSION,&wsaData);
if(0!=err)
{
return -1;
}
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET==sock)
{
printf("socket()Failed:%d\n",WSAGetLastError());
WSACleanup();
return -1;
}
sockaddr_in ServerAddr;
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(20000);
ServerAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
err=connect(sock,(sockaddr*)&ServerAddr,sizeof(ServerAddr));
printf("%d\n",sock);
if(SOCKET_ERROR == err)
{
printf("connect()Failed:%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
}
char data[]="Hello World!";
int sByte=send(sock,data,strlen(data),0);
if(SOCKET_ERROR==sByte)
{
printf("send()Failed:%d\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
}
shutdown(sock,SD_SEND);
char rbuf[1024];
while(1)
{
memset(rbuf,0,1024);
int rByte=recv(sock,rbuf,1024,0);
if(SOCKET_ERROR==rByte)
{
printf("recv()Failed:%\n",WSAGetLastError());
closesocket(sock);
WSACleanup();
return -1;
}
if(0==rByte)
{
printf("Connection is closed.\n");
break;
}
printf("TCP recv[%d]DATA:%s\n",rByte,rbuf);
}
closesocket(sock);
WSACleanup();
return 0;
}
服务器端代码:
#include <winsock2.h>
#include <stdio.h>
#include <memory.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSAData wsaData;
int err = WSAStartup(WINSOCK_VERSION,&wsaData);
if(0 != err)
{
return -1;
}
SOCKET sock = socket (AF_INET,SOCK_STREAM,0);
if(INVALID_SOCKET == sock)
{
printf("socket() Failed : %d\n",WSAGetLastError());
WSACleanup();
return -1;
}
sockaddr_in LocaAddr;
LocaAddr.sin_family = AF_INET;
LocaAddr.sin_port = htons (20000);
LocaAddr.sin_addr.s_addr = htonl(INADDR_ANY);
err = bind(sock,(sockaddr*)&LocaAddr,sizeof (LocaAddr));
printf("%d\n",sock);
if(SOCKET_ERROR == err)
{
printf("bind() Failed :%d \n",WSAGetLastError);
closesocket(sock);
return -1;
}
err = listen(sock,5);
if(SOCKET_ERROR == err)
{
printf("listen() Failed :%d\n",WSAGetLastError);
closesocket(sock);
WSACleanup();
return -1;
}
sockaddr_in ClientAddr;
int AddrLen = sizeof(ClientAddr);
while(1)
{
SOCKET sockConnected = accept(sock,(sockaddr*)&ClientAddr, &AddrLen);
if(INVALID_SOCKET == sockConnected)
{
printf("accpet() Failed :%d\n",WSAGetLastError);
closesocket(sock);
WSACleanup();
return -1;
}
char rbuf[1024];
while(1)
{
memset(rbuf,0,1024);
int rByte = recv(sockConnected,rbuf,1024,0);
if(SOCKET_ERROR ==rByte )
{
printf("recv() Failed: %d \n",WSAGetLastError);
closesocket(sockConnected);
break;
}
if(0 == rByte)
{
printf("Connection is closed.\n");
shutdown(sockConnected,SD_SEND);
closesocket(sockConnected);
break;
}
printf("TCP recv [%d]DATA: %s\n",rByte,rbuf);
int sByte = send(sockConnected,rbuf,rByte,0);
if(SOCKET_ERROR == sByte)
{
printf("send()Failed: %d\n",WSAGetLastError());
closesocket(sockConnected);
break;
}
}
}
closesocket(sock);
WSACleanup();
return 0;
}
转载请说明出处