简易client代码
#include<stdio.h>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)
int main() {
WORD wdVersion = MAKEWORD(2, 2);
WSADATA wdSockMsg;
int wres = WSAStartup(wdVersion, &wdSockMsg);
if (0 != wres) {
wres = WSAGetLastError();
printf("网络库打开失败,错误代码:%d", wres);
return 1;
}
else {
printf("网络库打开成功\n");
}
if (2 == HIBYTE(wdSockMsg.wVersion) || 2 == LOBYTE(wdSockMsg.wVersion)) {
printf("版本是2.2\n");
}
SOCKET socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == socketServer) {
int a = WSAGetLastError();
printf("socket创建失败,错误代码:%d", a);
WSACleanup();
return 1;
}
else {
printf("serverSocket创建成功\n");
}
struct sockaddr_in serverMsg;
serverMsg.sin_family = AF_INET;
serverMsg.sin_port = htons(12345);
serverMsg.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int cres=connect(socketServer, (struct sockaddr*) & serverMsg, sizeof(struct sockaddr));
if (INVALID_SOCKET == cres) {
int a = WSAGetLastError();
printf("connect失败,错误代码:%d", a);
closesocket(socketServer);
WSACleanup();
return 1;
}
else {
printf("connect成功\n");
}
char str[1500] = { 0 };
while (1) {
scanf("%s", &str);
printf("发送%d字节\n", strlen(str));
if (SOCKET_ERROR == send(socketServer, str, strlen(str), 0)) {
printf("send失败\n");
closesocket(socketServer);
WSACleanup();
return 1;
}
else {
printf("%s,发送成功\n", str);
}
}
closesocket(socketServer);
WSACleanup();
return 0;
}
select服务器代码
#include<stdio.h>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)
int main() {
WORD wdVersion = MAKEWORD(2, 2);
int a = *((char*)& wdVersion);
WSADATA wdSockMsg;
int wres = WSAStartup(wdVersion, &wdSockMsg);
if (0 != wres) {
wres = WSAGetLastError();
printf("网络库打开失败,错误代码:%d", wres);
return 1;
}
else {
printf("网络库打开成功\n");
}
if (2 == HIBYTE(wdSockMsg.wVersion) || 2 == LOBYTE(wdSockMsg.wVersion)) {
printf("版本是2.2\n");
}
SOCKET socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == socketServer) {
int a = WSAGetLastError();
printf("socket创建失败,错误代码:%d", a);
WSACleanup();
return 1;
}
else {
printf("serverSocket创建成功\n");
}
struct sockaddr_in si;
si.sin_family = AF_INET;
si.sin_port = htons(12345);
si.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int bres = bind(socketServer, (struct sockaddr*) & si, sizeof(si));
if (SOCKET_ERROR == bres) {
int a = WSAGetLastError();
printf("bind失败,错误代码:%d\n", a);
closesocket(socketServer);
WSACleanup();
return 1;
}
else {
printf("serverSocket与端口bind成功\n");
}
int lres = listen(socketServer, SOMAXCONN);
if (SOCKET_ERROR == lres) {
int a = WSAGetLastError();
printf("listen失败,错误代码:%d", a);
closesocket(socketServer);
WSACleanup();
return 1;
}
else {
printf("listen成功\n");
}
fd_set allSockets;
FD_ZERO(&allSockets);
FD_SET(socketServer, &allSockets);
struct timeval st;
st.tv_sec = 3;
st.tv_usec = 0;
while (1) {
fd_set tempSockets = allSockets;
int sres=select(0, &tempSockets, NULL, NULL, &st);
if (sres == 0) {
continue;
}
else if (sres > 0) {
for (int i = 0; i < tempSockets.fd_count; i++) {
if (tempSockets.fd_array[i] == socketServer) {
SOCKET socketClient = accept(socketServer, NULL, NULL);
if (INVALID_SOCKET == socketClient) {
continue;
}
FD_SET(socketClient,&allSockets);
printf("accept成功,socket为%d\n", socketClient);
}
else {
char strBuf[1500] = { 0 };
int rres=recv(tempSockets.fd_array[i], strBuf, 1500, 0);
if (0 == rres)
{
SOCKET socketTemp = tempSockets.fd_array[i];
FD_CLR(tempSockets.fd_array[i], &allSockets);
closesocket(socketTemp);
}
else if (0 < rres)
{
printf("接受%d字节,数据是:%s\n",rres,strBuf);
}
else {
int a = WSAGetLastError();
switch (a)
{
case 10054:
{
SOCKET socketTemp = tempSockets.fd_array[i];
FD_CLR(tempSockets.fd_array[i], &allSockets);
closesocket(socketTemp);
printf("客户端%d,强制下线", socketTemp);
}
}
}
}
}
}
else {
}
}
closesocket(socketServer);
WSACleanup();
return 0;
}