c/c++ Windows 简单TCP网络编程
//****************************************
//c/c++简单TCP网络编程
//首次编辑时间:2020/06/20
//最后修改时间:2020/06/21
//****************************************
#include"stdio.h"
#include"winsock2.h"
#pragma comment (lib, "ws2_32.lib")
void server();
void client();
int main()
{
int user;
printf("-------------------------------\n");
printf("请选择(1-server 2-client):");
scanf_s("%d", &user);
getchar();//清理缓冲区中留下的回车键 gets();或fflush(stdin);效果一样
printf("-------------------------------\n");
if (user == 1)
server();
else if (user == 2)
client();
return 0;
}
void server()
{
WSADATA wsadata;
SOCKET listeningsocket;
SOCKET connectionsocket;
SOCKADDR_IN serveraddr;
SOCKADDR_IN clientaddr;
int size_clientaddr = sizeof(clientaddr);
char recvdata[1024];
WSAStartup(MAKEWORD(2, 2), &wsadata);//初始化Winsock 2 DLL (Ws2_32.dll)
listeningsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建监听套接字
serveraddr.sin_family = PF_INET;
serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
serveraddr.sin_port = htons(33333);
bind(listeningsocket, (SOCKADDR *)&serveraddr, sizeof(serveraddr));//绑定端口和本机地址
listen(listeningsocket, 5);//监听连接,设置最多接受5个连接
printf("等待接受连接...\n");
connectionsocket = accept(listeningsocket, (SOCKADDR *)&clientaddr, &size_clientaddr);//等待连接
printf("新连接:IP:%s 端口:%d\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
while (1)
{
if (recv(connectionsocket, &recvdata, 1024, 0) > 0)
printf("%s\n", recvdata);
else
break;
}
printf("连接中断!\n");
closesocket(connectionsocket);
closesocket(listeningsocket);
WSACleanup();//终止Winsock 2 DLL (Ws2_32.dll) 的使用
}
void client()
{
WSADATA wsadata;
SOCKET sock;
SOCKADDR_IN sockaddr;
char senddata[1024];
WSAStartup(MAKEWORD(2, 2), &wsadata);//初始化Winsock 2 DLL (Ws2_32.dll)
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);//创建连接套接字
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
sockaddr.sin_port = htons(33333);
connect(sock, (SOCKADDR *)&sockaddr, sizeof(sockaddr));//请求连接
printf("连接成功!\n");
while (1)
{
printf("请输入要发送的内容:");
gets(senddata);
send(sock, senddata, sizeof(senddata), 0);
}
printf("连接中断!\n");
closesocket(sock);
WSACleanup();//终止Winsock 2 DLL (Ws2_32.dll) 的使用
}