�@�L�q�Ⴈ��уT���v���Ɋ܂܂��t�@�C���̑S���A�܂��͈ꕔ���g�p�������Ƃɂ�鑹�Q���ɂ��āA��̐ӔC���܂���B�܂��A�T���v���̕����R�[�h��S-JIS�Œ��܂��̂ŁA���g�p�̍ۂ�Windows����FTP����Ȃǂ��ēK�ȕ����R�[�h�ɕϊ����Ă��������B���A�T���v�����ɂ͐����̊ȗ����̂��߈Ӗ��̂Ȃ��R�[�h��A���p����̂���R�[�h���܂܂�Ă��܂��̂ł����ӂ��������B
�@���܂ŃX���b�h���g�p�������Ƃ��Ȃ����́A�X���b�h�ƕ����������S�O����邩������Ȃ����A���ۂɂ���Ă݂����قǓ�����̂ł͂Ȃ��B�X���b�h�Ɋւ��Ă͕ʂ��y�[�W��p�ӂ��Ă���̂ł�������Q�Ƃ��ė~�����B
����M�X���b�h�̐�����
/* ��M�X���b�h���� */ pthread_create(&tid,NULL,waitReceiveThread,NULL); pthread_join(tid,NULL); /* ��M�X���b�h�I���҂� */����M�X���b�h���[�`����
void* waitReceiveThread(void* pParam) { char buf[1024]; int recvSize; while(1) { /* �f�[�^��M�҂� */ recvSize = recv(fd,buf,1024,0); printf("Received %d bytes\n",recvSize); if(recvSize == 0) /* ����CLOSE�H */ { printf("check\n"); close(fd); break; } } return NULL; }�@��M�X���b�h���[�`���͒P��recv�̃��[�v�ɂȂ��Ă���Brecv�̓f�[�^����M����܂Ŗ߂��Ă��Ȃ��̂�CPU���Ԃ͏���Ȃ��BSOCKET���N���[�Y������recv�͖߂�l���O�Ŗ߂��Ă���̂ŁA���̏ꍇ�ɂ̓��[�v��break���鏈�������Ă���B��M�X���b�h�̐������X���b�h��pthread_join�ŐV���ɐ��������X���b�h�̏I����ҋ@���Ă���̂ŁA��M�X���b�h���[�`�����I������ΐ������X���b�h���I������B
int waitReceive(void) { fd_set fds; char buf[1024]; int recvSize; /* �o�b�`���ʏ������� */ while(1) /* ���b�Z�[�W���[�v */ { FD_ZERO(&fds); /* fd_set������ */ FD_SET(fd,&fds); /* fd�ݒ� */ select(fd + 1,&fds,NULL,NULL,NULL); /* �f�[�^��M�҂� */ if(FD_ISSET(fd,&fds)) /* �Y��fd�ǂݍ��݃f�[�^����H */ { /* �f�[�^��M */ recvSize = recv(fd,buf,1024,0); printf("Received %d bytes\n",recvSize); if(recvSize == 0) /* ����CLOSE�H */ { printf("check\n"); close(fd); break; } } } return 0; }
����M�X���b�h�̐�����
/* ��M�X���b�h���� */ hThread = (HANDLE)_beginthreadex(NULL,0,waitReceiveThread,NULL,0,&threadId); WaitForSingleObject(hThread,INFINITE); /* ��M�X���b�h�I���҂� */ CloseHandle(hThread); /* �n���h���N���[�Y */����M�X���b�h���[�`����
DWORD WINAPI waitReceiveThread(LPVOID pParam) { char buf[1024]; int recvSize; while(1) { /* �f�[�^��M�҂� */ recvSize = recv(fd,buf,1024,0); printf("Received %d bytes\n",recvSize); if(recvSize == 0) /* ����CLOSE�H */ { printf("check\n"); closesocket(fd); /* CLOSE */ break; } } return 0; }�@���̗�ł���M�X���b�h���[�`���̐������X���b�h�́Apthread�̂Ƃ��Ɠ��l�ɐV���ɐ��������X���b�h�̏I����ҋ@���Ă���BWin32�ł̓X���b�h�̃n���h�����V�O�i����ԂɂȂ�̂�WaitForSingleObject�őҋ@����B��M�X���b�h���[�`�����I������ΐ������X���b�h���I������B
�X���b�hrecv�̃T���v���i�\�[�X��Linux�ł��R���p�C���ł���悤�ɂȂ��Ă���BUNIX��Windows�̈Ⴂ�����Ă݂ė~�����B�j
[Winsock]select���g��
�@select���g���ꍇ��UNIX��SOCKET�Ƃ܂������������B���Windows���ۂ������Ȃ�AWSAAsyncSelect���g���Ƃ����肪���邪�A������̓��b�Z�[�W���g�p����B���b�Z�[�W���g�p����ɂ̓E�B���h�E���K�v�ɂȂ�l�̓��b�Z�[�W�̎d�g�݂����܂�ڂ����Ȃ��̂Ő��C�x���g���g�p����B
[Winsock]�C�x���g���g��
�@Winsock2.0�ł�Win32�̃C�x���g�I�u�W�F�N�g���g�p���邱�Ƃ��ł���B���b�Z�[�W�𗘗p���Ȃ��̂ŃE�B���h�E���K�v�Ȃ��AGUI���Ȃ��v���O�����Ŏg���₷���BAnpsock�����̕������g���Ă���B�Ƃ��낪�A�C�x���g���g����Winsock�̉�����͂��܂�Ȃ��B���������AWinsock2.0�̉���������Ȃ��B
�@�C�x���g�Ɋւ��Ă͕ʂ��y�[�W��p�ӂ��Ă���̂ł�������Q�Ƃ��ė~�����B
int waitReceive(void) { char buf[1024]; int recvSize; int nRet; HANDLE hEvent = WSACreateEvent(); WSANETWORKEVENTS events; WSAEventSelect(fd,hEvent,FD_READ|FD_CLOSE); while(1) { /* �C�x���g�҂� */ nRet = WSAWaitForMultipleEvents(1,&hEvent,FALSE,WSA_INFINITE,FALSE); if(nRet == WSA_WAIT_FAILED) { printf("!!!!!!!!!!!!!!!!!!!!1\n"); break; } /* �C�x���g�̒��� */ if(WSAEnumNetworkEvents(fd,hEvent,&events) == SOCKET_ERROR) { printf("???\n"); } else { /* CLOSE */ if(events.lNetworkEvents & FD_CLOSE) { printf("close\n"); closesocket(fd); break; } /* READ */ if(events.lNetworkEvents & FD_READ) { recvSize = recv(fd,buf,1024,0); printf("Received %d bytes\n",recvSize); } } } WSACloseEvent(hEvent); /* �C�x���g�N���[�Y */ return 0; }
�C�x���grecv�̃T���v��
[Java]Socket�i�N���C�A���g�j
�@Java�ŃN���C�A���g�̃\�P�b�g���쐬����ɂ̓z�X�g�ƃ|�[�g���w�肵��Socket��new���邾���ł���B�������̂��ꂾ����C�Ō����Ƃ����socket����connect�̌Ăяo���܂ōς�ł��܂���������ł���B
// �N���C�A���g�\�P�b�g�쐬 Socket conn = new Socket("localhost",port); System.out.println("Connecting to port " + port); // �f�[�^��M�X���b�h���� RecvData rd = new RecvData(conn.getInputStream()); rd.start();�@�f�[�^�̎�M�͑��̌���Ɠ��l�X���b�h��p���Ă���B���ۂɃT���v�������Ă����������������ɂȂ�Ǝv�����A�킸���T�A�U�O�s�ŃN���C�A���g�̃v���O������������̂ł���B�f���炵���I
class RecvData extends Thread { InputStream st; public RecvData(InputStream st) { this.st = st; } public void run() { int data; try { // �f�[�^�ǂݍ��� while((data = st.read()) != -1) { System.out.print((char)data); } } catch(IOException e) { System.out.println(e); } } }
// �T�[�o�[�\�P�b�g�쐬 ServerSocket server = new ServerSocket(port); System.out.println("Listening on port " + port);�@�쐬�����T�[�o�[�\�P�b�g��Accept����ƃN���C�A���g�̍��Ŋ��o��Socket��Ԃ��̂ŁA�ȍ~���l�ɏ������Ă��Ηǂ��B�T���v���ł͎�M�X���b�h�̃N���X�̓N���C�A���g�Ƌ��L���Ă���B
// Accept Socket conn = server.accept(); System.out.println("Accept"); // �f�[�^��M�X���b�h���� RecvData rd = new RecvData(conn.getInputStream()); rd.start();
�\�P�b�g�̃T���v���i�T�[�o�[�A�N���C�A���g�j
Copyright(C) 2001-2003 Allergy Design Office All rights reserved.
[Home]