Skip to content

Instantly share code, notes, and snippets.

@oxnz
Created February 5, 2014 02:23
Show Gist options
  • Select an option

  • Save oxnz/8816425 to your computer and use it in GitHub Desktop.

Select an option

Save oxnz/8816425 to your computer and use it in GitHub Desktop.
a simple tcp server
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s port\n", argv[0]);
return -1;
}
short port = atoi(argv[1]);
if (!port) {
fprintf(stderr, "port num error: %s\n", argv[1]);
return -1;
}
WSADATA wsa;
if (WSAStartup(MAKEWORD(2, 2), &wsa)) {
fprintf(stderr, "init socket failed\n");
return -1;
}
SOCKET serverSocket;
if ((serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) ==
INVLIAD_SOCKET) {
fprintf(stderr, "create socket failed\n");
return -1;
}
struct sockaddr_in serverAddress;
memset(&serverAddress, 0, sizeof(struct sockaddr_in));
serverAddress.sin_family = PF_INET;
serverAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
serverAddress.sin_port = htons(port);
if (bind(serverSocket, (sockaddr*)&serverAddress, sizeof(serverAddress))
== SOCKET_ERROR) {
fprintf(stderr, "bind to %d failed\n", port);
return -1;
}
if (listen(serverSocket, SOMAXCONN) == SOCKET_ERROR) {
fprintf(stderr, "listen failed\n");
return -1;
}
SOCKET clientSocket;
struct sockaddr_in clientAddress;
memset(&clientAddress, 0, sizeof(clientAddresss));
int addrlen = sizeof(clientAddress);
if ((clientSocket = accept(serverSocket, (sockaddr*)&clientAddress,
&addrlen)) == INVLIAD_SOCKET) {
fprintf(stderr, "accept failed\n");
return -1;
}
char buf[4096];
while (1) {
int bytes = recv(clientSocket, buf, sizeof(buf), 0);
if (bytes == SOCKET_ERROR) {
fprintf(stderr, "recv failed\n");
return -1;
}
buf[bytes] = '\0';
if (send(clientSocket, buf, bytes, 0) == SOCKET_ERROR) {
fprintf(stderr, "send failed\n");
return -1;
}
}
WSACleanup();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment