This repository was archived by the owner on Nov 30, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbosClient.cpp
More file actions
193 lines (156 loc) · 4.81 KB
/
bosClient.cpp
File metadata and controls
193 lines (156 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
// Client.cpp : Definiert den Einstiegspunkt fuer die Konsolenanwendung.
//
#include "stdafx.h"
#if VISUALSTUDIO
// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
#endif
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "1958"
static int verbose = 0;
static char answer[500];
char *getAnswer( void ) {
return answer;
}
int terminate( char* text ) {
if( verbose ) printf("%s", text);
#if WINDOWS
WSACleanup();
system( "pause" );
#endif
return 1;
}
int sendMessageI2(int i, int j ) {
char buff[100];
sprintf_s( buff, "%d %d \n", i, j );
return sendMessage( buff );
}
int sendMessage(char *sendbuf ) {
char terminateMessage[100];
#if WINDOWS
WSADATA wsaData;
SOCKET ConnectSocket = INVALID_SOCKET;
#else
int ConnectSocket = INVALID_SOCKET;
#endif
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
long int iResult;
int recvbuflen = DEFAULT_BUFLEN;
char recvbuf[DEFAULT_BUFLEN];
#if WINDOWS
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
#endif
#if WINDOWS
ZeroMemory( &hints, sizeof(hints) );
#else
memset(&hints, 0, sizeof hints); // make sure the struct is empty
#endif
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
// Resolve the server address and port
iResult = getaddrinfo("localhost", DEFAULT_PORT, &hints, &result);
if ( iResult != 0 ) {
printf("getaddrinfo failed with error: %ld\n", iResult);
#if WINDOWS
WSACleanup();
#endif
return 1;
}
// Attempt to connect to an address until one succeeds
for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
// Create a SOCKET for connecting to server
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
ptr->ai_protocol);
if (ConnectSocket == INVALID_SOCKET) {
#if WINDOWS
printf("socket failed with error: %ld\n", WSAGetLastError());
WSACleanup();
#else
fprintf(stderr, "socket failed, getaddrinfo error: %s\n", gai_strerror((int)iResult));
#endif
return 1;
}
// Connect to server.
iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
if (iResult == SOCKET_ERROR) {
#if WINDOWS
closesocket(ConnectSocket);
#else
close(ConnectSocket);
#endif
ConnectSocket = INVALID_SOCKET;
continue;
}
if( verbose ) printf("socket connected\n");
break;
}
freeaddrinfo(result);
if (ConnectSocket == INVALID_SOCKET) {
sprintf_s(terminateMessage, "%s", "Unable to connect to server!\n");
terminate(terminateMessage);
}
// Send an initial buffer
iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
if (iResult == SOCKET_ERROR) {
#if WINDOWS
printf("socket failed with error: %ld\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
#else
fprintf(stderr, "socket failed, getaddrinfo error: %s\n", gai_strerror((int)iResult));
close(ConnectSocket);
#endif
return 1;
}
if( verbose ) printf("Bytes Sent: %ld\n", iResult);
// shutdown the connection since no more data will be sent
iResult = shutdown(ConnectSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
#if WINDOWS
printf("shutdown failed with error: %ld\n", WSAGetLastError());
closesocket(ConnectSocket);
WSACleanup();
#else
fprintf(stderr, "shutdown failed, getaddrinfo error: %s\n", gai_strerror((int)iResult));
close(ConnectSocket);
#endif
return 1;
}
answer[0] = '\0';
// Receive until the peer closes the connection
do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
if ( iResult > 0 ) {
recvbuf[iResult] = '\0';
if( verbose ) printf("Bytes received: %ld %s\n", iResult, recvbuf);
strcat_s( answer, recvbuf );
//printf(">>>%s<<<\n", answer );
} else if ( iResult == 0 ) {
if( verbose ) printf("Connection closed\n");
} else {
#if WINDOWS
printf("recv failed with error: %d\n", WSAGetLastError());
#else
fprintf(stderr, "recv failed, getaddrinfo error: %s\n", gai_strerror((int)iResult));
#endif
}
} while( iResult > 0 );
// cleanup
#if WINDOWS
closesocket(ConnectSocket);
WSACleanup();
#else
close(ConnectSocket);
#endif
return 0;
}