#include <iostream>
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include "Winsock.h"
using namespace std;
DWORD WINAPI Fun1Proc(LPVOID lpParameter);
char sendBuf[30];
BOOL flag = FALSE;
void main()
{
cout << "Service" <<endl;
SOCKET s;
WSADATA wsd;
int PORT = 5000;
//addr sin
struct sockaddr_in my_addr;
/*
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(PORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
*/
my_addr.sin_family = AF_INET; //选择网络类型为TCP/IP
my_addr.sin_addr.s_addr = inet_addr("59.78.17.189");
my_addr.sin_port = htons( 8888 ); //选择端口8888
int addr_len = sizeof(struct sockaddr_in);
memset(&my_addr.sin_zero,'\0',sizeof(my_addr.sin_zero));
s = WSAStartup(MAKEWORD(2,2), &wsd);
s = socket ( PF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( bind(s, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == 0 ) { printf("Bind OK"); };
if ( listen(s, 5) == 0 ) {printf("Listen OK");};
//
int new_fd;
struct sockaddr_in their_addr;
int sin_size = sizeof(their_addr);
new_fd = accept(s, (struct sockaddr *)&their_addr, &sin_size);
printf("accepting... \n");
//
char recvBuf[30];
int n;
WSAEVENT hEvent = WSACreateEvent();
if( WSAEventSelect( new_fd , hEvent , FD_READ | FD_CLOSE ) == 0 )
printf("WSAEventSelect Succeeded!\n");
WSANETWORKEVENTS networkEvents;
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
while(1) {
DWORD index = WSAWaitForMultipleEvents(5 , &hEvent , FALSE , WSA_INFINITE , FALSE);
int EventType = WSAEnumNetworkEvents( new_fd , hEvent , &networkEvents );
if(networkEvents.lNetworkEvents & FD_READ )
{
if( n = recv(new_fd , recvBuf , 30 , 0 ) ) { cout << recvBuf << endl;continue; }
}
if(networkEvents.lNetworkEvents & FD_CLOSE )
{
closesocket(new_fd);
break;
}
if ( flag )
{
int m = send(new_fd , sendBuf , 30 , 0 );
cout << m << endl;
flag = FALSE;
}
}
system("pause");
}
DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data
{
while (true)
{
if ( !flag )
{
cin >> sendBuf;
flag = TRUE;
}
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
前往页