0% found this document useful (0 votes)
23 views9 pages

Socket

The document contains a C program that implements a simple TCP server and client using Winsock. The server listens on port 8080, accepts client connections, and converts received messages to uppercase before sending them back. The client connects to the server, sends messages, and displays responses until the user types 'bye'.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views9 pages

Socket

The document contains a C program that implements a simple TCP server and client using Winsock. The server listens on port 8080, accepts client connections, and converts received messages to uppercase before sending them back. The client connects to the server, sends messages, and displays responses until the user types 'bye'.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

#include <winsock2.

h>

#include <ws2tcpip.h>

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

#define PORT 8080

void ToUp(char *p);

int main(int argc, char const *argv[])

WSADATA wsaData;

int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);

if (iResult != 0) {

fprintf(stderr, "WSAStartup failed: %d\n", iResult);


return 1;

SOCKET server_fd = INVALID_SOCKET;


SOCKET new_socket = INVALID_SOCKET;

struct sockaddr_in address;

int opt = 1;

int addrlen = sizeof(address);


char buffer[1024] = {0};

int valread;

int continu = 1;

server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (server_fd == INVALID_SOCKET) {

fprintf(stderr, "socket failed: %d\n", WSAGetLastError());

WSACleanup();
return 1;

// Allow reuse

if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt,


sizeof(opt)) == SOCKET_ERROR) {

fprintf(stderr, "setsockopt failed: %d\n", WSAGetLastError());

closesocket(server_fd);

WSACleanup();

return 1;
}

memset(&address, 0, sizeof(address));

address.sin_family = AF_INET;

address.sin_addr.s_addr = INADDR_ANY;

address.sin_port = htons(PORT);

if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) ==


SOCKET_ERROR) {
fprintf(stderr, "bind failed: %d\n", WSAGetLastError());
closesocket(server_fd);

WSACleanup();

return 1;

if (listen(server_fd, 3) == SOCKET_ERROR) {

fprintf(stderr, "listen failed: %d\n", WSAGetLastError());

closesocket(server_fd);
WSACleanup();

return 1;

printf("Waiting for connection on port %d...\n", PORT);

new_socket = accept(server_fd, (struct sockaddr *)&address, &addrlen);

if (new_socket == INVALID_SOCKET) {

fprintf(stderr, "accept failed: %d\n", WSAGetLastError());

closesocket(server_fd);

WSACleanup();

return 1;
}

while (continu == 1) {

char str_cli_ip[INET_ADDRSTRLEN] = "";


inet_ntop(AF_INET, &address.sin_addr, str_cli_ip, INET_ADDRSTRLEN);

printf("ipclient: %s\n", str_cli_ip);

printf("port: %d\n", ntohs(address.sin_port));

printf("Tin nhan ban nhan dc tu client:\n");


valread = recv(new_socket, buffer, sizeof(buffer)-1, 0);

if (valread == SOCKET_ERROR || valread == 0) {

printf("Connection closed or error: %d\n", WSAGetLastError());

break;

buffer[valread] = '\0';

ToUp(buffer);
printf("%s\n", buffer);

send(new_socket, buffer, (int)strlen(buffer), 0);

closesocket(new_socket);

closesocket(server_fd);

WSACleanup();

return 0;

void ToUp(char *p)


{

while (*p) {

*p = (char)toupper((unsigned char)*p);

p++;
}

}
#include <winsock2.h>

#include <ws2tcpip.h>

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define PORT 8080

int main(int argc, char const *argv[])

WSADATA wsaData;

if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {

fprintf(stderr, "WSAStartup failed\n");

return 1;

struct sockaddr_in serv_addr;

SOCKET sock = INVALID_SOCKET;


char buffer[1024] = {0};

char add[225] = {0};

int continu = 1;

printf("Nhap dia chi server\n");

if (!fgets(add, sizeof(add), stdin)) {

fprintf(stderr, "Failed to read address\n");

WSACleanup();
return 1;

// remove newline

add[strcspn(add, "\r\n")] = '\0';

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) ==


INVALID_SOCKET) {

fprintf(stderr, "Socket creation error: %d\n", WSAGetLastError());

WSACleanup();

return -1;

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(PORT);

if (inet_pton(AF_INET, add, &serv_addr.sin_addr) <= 0) {

fprintf(stderr, "Invalid address/ Address not supported\n");


closesocket(sock);
WSACleanup();

return -1;

if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) ==


SOCKET_ERROR) {

fprintf(stderr, "Connection Failed: %d\n", WSAGetLastError());

closesocket(sock);
WSACleanup();
return -1;

while (continu == 1) {

char mess_from_client[225] = {0};

printf("Nhap noi dung tin nhan gui den server\n");

if (!fgets(mess_from_client, sizeof(mess_from_client), stdin)) break;

// remove newline
mess_from_client[strcspn(mess_from_client, "\r\n")] = '\0';

// send

if (send(sock, mess_from_client, (int)strlen(mess_from_client), 0) ==


SOCKET_ERROR) {

fprintf(stderr, "send failed: %d\n", WSAGetLastError());

break;

int valread = recv(sock, buffer, sizeof(buffer)-1, 0);


if (valread == SOCKET_ERROR) {
fprintf(stderr, "recv failed: %d\n", WSAGetLastError());

break;

buffer[valread] = '\0';

printf("Tin nhan ban nhan dc tu server:\n%s\n", buffer);

if (strcmp(mess_from_client, "bye") == 0) {

continu = 0;
}

closesocket(sock);

WSACleanup();

return 0;

You might also like