下面未处理异常
tcpserver.cpp
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
WORD wVersion = MAKEWORD(, );
int err;
WSADATA wsaData;
err = WSAStartup(wVersion, &wsaData);
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, NULL);
sockaddr_in addSrv;
addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //或用inet_addr("192.168.1.1");
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(PORT);
bind(sockSrv, (sockaddr FAR *)&addSrv, sizeof(addSrv));
int iResult = listen(sockSrv, SOMAXCONN);//等待连结数, 最大连接请求数 SOMAXCONN
printf("server ip:%s\n", inet_ntoa(addSrv.sin_addr));
printf("server port:%d\n", ntohs(addSrv.sin_port));
printf("start listening...\n"); while(TRUE)
{
sockaddr_in addClient;
int iLen = sizeof(addClient);
SOCKET sockConn = accept(sockSrv, (sockaddr FAR *)&addClient, &iLen);
printf("client ip:%s\n", inet_ntoa(addClient.sin_addr));
printf("client port:%d\n", ntohs(addClient.sin_port));
char sendBuf[];
sprintf(sendBuf, "Welcome %s to server", inet_ntoa(addClient.sin_addr));
send(sockConn, sendBuf, strlen(sendBuf) + , ); //多写一个字节, 可以多个\0
char recvBuf[];
recv(sockConn, recvBuf, , ); //tcp用recv, udp用recvfrom
printf("%s\n", recvBuf);
closesocket(sockConn);
}
closesocket(sockSrv);
WSACleanup();
return ;
}
tcpclient.cpp
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
WORD wVersion = MAKEWORD(, );
int err;
WSADATA wsaData;
err = WSAStartup(wVersion, &wsaData);
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, NULL);
sockaddr_in addSrv;
addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //服务器地址
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(PORT);
connect(sockClient, (sockaddr FAR *)&addSrv, sizeof(addSrv));
char recvBuf[];
recv(sockClient, recvBuf, , );
printf("%s\n", recvBuf);
send(sockClient, "hello123", strlen("hello123") + , );
closesocket(sockClient);
WSACleanup();
system("pause");
return ;
}
udpserver.cpp
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
WORD wVersion = MAKEWORD(, );
int err;
WSADATA wsaData;
err = WSAStartup(wVersion, &wsaData);
SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, NULL);
sockaddr_in addSrv;
addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //或用inet_addr("192.168.1.1");
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(PORT);
bind(sockSrv, (sockaddr FAR *)&addSrv, sizeof(addSrv)); printf("server ip:%s\n", inet_ntoa(addSrv.sin_addr));
printf("server port:%d\n", ntohs(addSrv.sin_port)); while(TRUE)
{
sockaddr_in addClient;
int iLen = sizeof(addClient);
char recvBuf[];
recvfrom(sockSrv, recvBuf, , , (sockaddr*)&addClient, &iLen);
printf("client ip:%s\n", inet_ntoa(addClient.sin_addr));
printf("client port:%d\n", ntohs(addClient.sin_port));
printf("%s", recvBuf);
}
closesocket(sockSrv);
WSACleanup();
return ;
}
udpclient.cpp
#include "WinSock2.h"
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 1666
int main()
{
WORD wVersion = MAKEWORD(, );
int err;
WSADATA wsaData;
err = WSAStartup(wVersion, &wsaData);
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, NULL);
sockaddr_in addSrv;
addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //或用inet_addr("192.168.1.1");
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(PORT);
sendto(sockClient, "hello", strlen("hello") + , , (SOCKADDR*)&addSrv, sizeof(addSrv));
closesocket(sockClient);
WSACleanup();
system("pause");
return ;
}