#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;