C++学習-Socket入門実験
3219 ワード
Serverエンドコード:
Clientエンドコード:
#include <winsock2.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
#include <vector>
#define SIZE_BUFFER 200
int main(){
WSAData wsadata;
WSAStartup(MAKEWORD(2,0),&wsadata);
SOCKET ssocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);// TCP Socket,
struct sockaddr_in server;
server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons(25000);// ,
if(bind(ssocket,(sockaddr*)&server,sizeof(sockaddr_in)) == SOCKET_ERROR){
std::cout<<"error bind"<<std::endl;
}// TCP Socket
if(listen(ssocket, 4) == SOCKET_ERROR){
std::cout<<"listen error"<<std::endl;
}
fd_set read_fdset;//
std::vector<int> sockets;// , , ,
while(true){
FD_ZERO(&read_fdset);
FD_SET(ssocket,&read_fdset);
int n = select(0,&read_fdset,NULL,NULL,0);
if(FD_ISSET(ssocket,&read_fdset)){// ,
SOCKET s = accept(ssocket,NULL,0);//
if(n!=SOCKET_ERROR){
sockets.push_back(s);
FD_SET(s,&read_fdset);// FD_READ
}
}
for(int i=0;i<sockets.size();i++){//
char buffer[SIZE_BUFFER];
memset(buffer,0,SIZE_BUFFER);
int len = 0;
if((len = recv(sockets[i],buffer,SIZE_BUFFER,0))>0){
printf("recv size = %d, and msg = %s
",len,buffer);
}//len:0 , ,
else if(len == 0){// ,
sockets.erase(sockets.begin()+i);
}
}
}
system("pause");
WSACleanup();
return 0;
}
Clientエンドコード:
#include <winsock2.h>
#include <iostream>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main(){
WSADATA wdata;
WSAStartup(MAKEWORD(2,0),&wdata);
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addr.sin_family = AF_INET;
addr.sin_port = htons(25000);
SOCKET cons = socket(AF_INET,SOCK_STREAM,0);
//bind(cons,(sockaddr*)&addr,0);
SOCKET s = connect(cons,(sockaddr*)&addr,sizeof(SOCKADDR_IN));
if( s == SOCKET_ERROR ){
std::cout<< s << std::endl;
}
fd_set readset,writeset,exceptset;
FD_ZERO(&writeset);
FD_SET(s,&writeset);
while(true){
select(0,&readset,&writeset,&exceptset,0);
if(FD_ISSET(s,&writeset)){
int size = send(cons,"hello",6,0);
std::cout<<"send msg size = "<<size<<std::endl;
closesocket(s);
WSACleanup();
break;
}
}
system("pause");
WSACleanup();
return 0;
}