socket服务端客户端例子
?þÎñ?Ë
#include
#include
#pragma comment(lib, "ws2_32.lib")
#define Server_Port 8753
int main()
{
WSADATA d;
SOCKET sockServer = INVALID_SOCKET;
sockaddr_in my_addr;
sockaddr_in clientAddr;
int sizeClientAddr = sizeof(clientAddr);
fd_set fd;
timeval tv = {1, 0};
char buf[256] = {0};
char msgHello[] = "hello!";
for (;;)
{
if (WSAStartup(MAKEWORD(1,1), &d) != 0)
break;
if ((sockServer = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
break;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(Server_Port); // ?ËÍâÌî0ΪËæ?úÑ?Ôñ?Ë?Ú
my_addr.sin_addr.s_addr = INADDR_ANY; // Ê?ÓÃ×Ô?ºµÄIPµØÖ? memset(my_addr.sin_zero, 0, sizeof(my_addr.sin_zero));
if (0 != bind(sockServer, (sockaddr*)&my_addr, sizeof(my_addr)))//?ó??µ?SOCKET
break;
if (0 != listen(sockServer, 10))//ÕìÌýsocket????ÉèÖÃ×î?ó?Í??Á??ÓÊýΪ10
break;
FD_ZERO(&fd);
FD_SET(sockServer, &fd);
while(1)
{
fd_set fdCur = fd;
if (select(0, &fdCur, NULL, NULL, &tv) <= 0) continue;
for (int i = 0; i < fdCur.fd_count; i++) {
if (fdCur.fd_array[i] == sockServer) //Èç?ûsocketÊÇ?þÎñÆ???Ôò?ÓÊÕÁ??Ó
{
sizeClientAddr = sizeof(clientAddr); memset(&clientAddr, 0, sizeof(clientAddr)); SOCKET s = accept(sockServer, (sockaddr*)&clientAddr, &sizeClientAddr);
if (INVALID_SOCKET != s)
FD_SET(s, &fd);
// say hello
send(s, msgHello, strlen(msgHello)+1, 0); }
else
{
int rcvSize = recv(fdCur.fd_array[i], buf, sizeof(buf),0);
if (rcvSize <= 0)
{
closesocket(fdCur.fd_array[i]); FD_CLR(fdCur.fd_array[i], &fd); }
else
{
printf("receive: %s\n", buf);
//TODO ?ÖÎöÊÕµ?µÄÊý?Ý???ØÓ?
}
}
}
}
break;
}
if (sockServer != INVALID_SOCKET) {
closesocket(sockServer);
}
WSACleanup();
return 0;
}
?Í???Ë
#include
#include
#pragma comment(lib, "ws2_32.lib")
#define Server_Port 8753
#define Server_IP "127.0.0.1"
int main()
{
char msg[64] = "hello server!";
timeval tv = {2, 0}; //2Ãë??Ê?
fd_set readfds;
WSADATA d;
int sock = INVALID_SOCKET;
sockaddr_in server_addr;
for (;;)
{
if (WSAStartup( MAKEWORD(1,1), &d ) != 0) break;
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
break;
server_addr.sin_family = AF_INET; memset(server_addr.sin_zero, 0, sizeof(server_addr.sin_zero));
server_addr.sin_port = htons(Server_Port); server_addr.sin_addr.s_addr = inet_addr(Server_IP);
if(::connect(sock, (sockaddr*)&server_addr, sizeof(server_addr)))
{
break;
}
if (send(sock, msg, strlen(msg) + 1, 0) == SOCKET_ERROR)
{
break;
}
FD_ZERO(&readfds);
FD_SET(sock, &readfds);
select(0, &readfds, NULL, NULL, &tv);
if (!FD_ISSET(sock, &readfds)) break;
int rcvSize = recv(sock, msg, sizeof(msg), 0);
if(rcvSize > 0)
{
printf("receive: %s\n", msg); }
break;
}
if (sock != INVALID_SOCKET) {
closesocket(sock);
}
WSACleanup();
return 0;
}