по мсдну написал следуйщее: сервер:
| Код | #include <stdio.h> #include "winsock2.h"
int main() {
WSADATA wsaData; SOCKET RecvSocket; struct sockaddr_in peer; int Port = 27015; char RecvBuf[1024]; int BufLen = 1024; struct sockaddr_in SenderAddr; int SenderAddrSize = sizeof(SenderAddr);
WSAStartup(MAKEWORD(2,2), &wsaData);
RecvSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
peer.sin_family = AF_INET; peer.sin_addr.s_addr = inet_addr("127.0.0.1"); peer.sin_port = htons(27015);(INADDR_ANY);
bind(RecvSocket, (SOCKADDR *) &peer, sizeof(peer));
if (listen( RecvSocket, 1 ) == SOCKET_ERROR) { printf("Error listening on socket.\n"); closesocket( RecvSocket); WSACleanup(); return 1; }
SOCKET AcceptSocket; printf("Waiting for client to connect...\n");
AcceptSocket = accept(RecvSocket, NULL, NULL ); if (AcceptSocket == INVALID_SOCKET) { printf("accept failed: %d\n", WSAGetLastError()); closesocket(RecvSocket); WSACleanup(); return 1; } else printf("Client connected.\n");
printf("Receiving datagrams...\n"); recv(RecvSocket, RecvBuf, BufLen, 0); for(int i = 0; i<strlen(RecvBuf); i++) { printf("%c", RecvBuf[i]); }
printf("Finished receiving. Closing socket.\n"); closesocket(RecvSocket);
printf("Exiting.\n"); WSACleanup(); return 0; }
|
клиент:
| Код | #include <winsock2.h> #include <stdio.h>
#define DEFAULT_BUFLEN 512 #define DEFAULT_PORT "27015"
int __cdecl main() {
//---------------------- // Declare and initialize variables.
int iResult; WSADATA wsaData; SOCKET ConnectSocket; struct sockaddr_in clientService;
char *sendbuf = "this is a test"; char recvbuf[DEFAULT_BUFLEN]; int recvbuflen = DEFAULT_BUFLEN;
//---------------------- // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != NO_ERROR) { printf("WSAStartup failed: %d\n", iResult); return 1; }
//---------------------- // Create a SOCKET for connecting to server ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ConnectSocket == INVALID_SOCKET) { printf("Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); return 1; }
//---------------------- // The sockaddr_in structure specifies the address family, // IP address, and port of the server to be connected to. clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" ); clientService.sin_port = htons( 27015 );
//---------------------- // Connect to server. iResult = connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ); if ( iResult == SOCKET_ERROR) { closesocket (ConnectSocket); printf("Unable to connect to server: %ld\n", WSAGetLastError()); WSACleanup(); return 1; }
// Send an initial buffer iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 ); if (iResult == SOCKET_ERROR) { printf("send failed: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return 1; }
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) { printf("shutdown failed: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return 1; }
// Receive until the peer closes the connection do {
iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0); if ( iResult > 0 ) printf("Bytes received: %d\n", iResult); else if ( iResult == 0 ) printf("Connection closed\n"); else printf("recv failed: %d\n", WSAGetLastError());
} while( iResult > 0 );
// cleanup closesocket(ConnectSocket); WSACleanup();
return 0; }
|
когда вывожу строку, появляется абракадабра. что делать? |