您的位置:首页 > 理论基础 > 计算机网络

tcp服务器端,客户端练习程序

2016-03-31 11:13 495 查看
不知道为何不能持续通信,只能通信两次好像就recv失败了,不知何故,继续学习吧。

tcp

服务器端

#include<WinSock2.h>

#include<stdio.h>

#include<Windows.h>

#include<iostream>

#pragma comment(lib,"WS2_32.lib")

using namespace std;

int main()

{

WSADATA wsaData;

SOCKET ListengingSock;

SOCKET Newconnection;

SOCKADDR_IN ServerAddr;

SOCKADDR_IN ClientAddr;

int ClientAddrlen = sizeof(ClientAddr);

int port = 5150;

char sendtext[16];

char recvtext[16];

if ((WSAStartup(MAKEWORD(2, 2),&wsaData)) != 0)

{

cout << "wsastarup error" << endl;

}

cout << "wsastarup successful" << endl;

if ((ListengingSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)

{

cout << "listenging sock failed" << endl;

return 0;

}

cout << "listening sock successful" << endl;

ServerAddr.sin_family = AF_INET;

ServerAddr.sin_port = htons(port);

ServerAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

if ((bind(ListengingSock, (SOCKADDR*)&ServerAddr, sizeof(ServerAddr))) == SOCKET_ERROR)

{

cout << "bind error" << endl;

return 0;

}

cout << "bind successful" << endl;

if ((listen(ListengingSock, 5)) == SOCKET_ERROR)

{

cout << "listen failed" << endl;

return 0;

}

cout << "listen successful" << endl;

while (true)

{

if ((Newconnection = accept(ListengingSock, (SOCKADDR*)&ClientAddr, &ClientAddrlen)) == INVALID_SOCKET)

{

cout << "accept failed" << endl;

continue;

}

cout << "accept successful "<< inet_ntoa(ClientAddr.sin_addr)<< endl;

//printf("接收到一个连接:%s\r\n", inet_ntoa(ClientAddr.sin_addr));

if (recv(Newconnection, recvtext, strlen(recvtext), 0) == SOCKET_ERROR)

{

cout << "recv failed" << endl;

return 0;

}

cout << "recv successful:\n" << recvtext<< endl;

//recvtext[0] = 0;

cout << "输入发送数据" << endl;

cin >> sendtext;

if (send(Newconnection, sendtext, strlen(sendtext), 0) == SOCKET_ERROR)

{

cout << "send failed" << endl;

return 0;

}

cout << "send successful" << endl;

//sendtext[0] = 0;

closesocket(Newconnection);

}

closesocket(ListengingSock);

return 0;

}

tcp客户端

#include<WinSock2.h>

#include<stdio.h>

#include<Windows.h>

#include<iostream>

#pragma comment(lib,"WS2_32.lib")

using namespace std;

int main()

{

WSADATA wsaData;

SOCKET s;

SOCKADDR_IN ServerAddr;

int port = 5150;

char sendtext[16];

char recvtext[16];

if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)

{

cout << "wsastarup error" << endl;

}

cout << "wsastarup successful" << endl;

if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)

{

cout << "sock error" << endl;

return 0;

}

ServerAddr.sin_family = AF_INET;

ServerAddr.sin_port = htons(port);

ServerAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if((connect(s,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr)))==SOCKET_ERROR)

{

cout << "connect fialed" << endl;

return 0;

}

while (true)

{

cout << "输入要发送的数据" << endl;

cin >> sendtext;

if ((send(s, sendtext, strlen(sendtext), 0)) == SOCKET_ERROR)

{

cout << "send error" << endl;

return 0;

}

cout << "send successful" << endl;

//sendtext[0] = 0;

if ((recv(s, recvtext, strlen(recvtext), 0)) == SOCKET_ERROR)

{

cout << "recv failed" << endl;

return 0;

}

cout << "接收到数据\n" << recvtext << endl;

//recvtext[0] = 0;

}

closesocket(s);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: