C++単純実装C/Sモデル
6002 ワード
Server.c
Client.c
#include
#include
#include
#include
#include
#include
#include
#include
#define SERV_PORT 9988
int main(void)
{
int sfd, cfd;
int len, i;
char buf[BUFSIZ], clie_IP[BUFSIZ];
struct sockaddr_in serv_addr, clie_addr;
socklen_t clie_addr_len;
/* socket IPv4 TCP */
sfd = socket(AF_INET, SOCK_STREAM, 0);
/* man 7 ip */
bzero(&serv_addr, sizeof(serv_addr)); //
serv_addr.sin_family = AF_INET; // IPv4
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); // IP
serv_addr.sin_port = htons(SERV_PORT); //
/* */
bind(sfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
/* , */
listen(sfd, 64); //
printf("wait for client connect ...
");
/* */
clie_addr_len = sizeof(clie_addr_len);
/* 1 sfd; 2 , 3 , client */
cfd = accept(sfd, (struct sockaddr *)&clie_addr, &clie_addr_len); /* , */
printf("client IP:%s\tport:%d
",
inet_ntop(AF_INET, &clie_addr.sin_addr.s_addr, clie_IP, sizeof(clie_IP)),
ntohs(clie_addr.sin_port));
while (1) {
/* */
len = read(cfd, buf, sizeof(buf));
write(STDOUT_FILENO, buf, len);
/* */
for (i = 0; i < len; i++)
buf[i] = toupper(buf[i]);
/* */
write(cfd, buf, len);
}
/* */
close(sfd);
close(cfd);
return 0;
}
Client.c
#include
#include
#include
#include
#include
#define SERV_IP "127.0.0.1"
#define SERV_PORT 9988
int main(void)
{
int sfd, len;
struct sockaddr_in serv_addr;
char buf[BUFSIZ];
/* socket IPv4 TCP*/
sfd = socket(AF_INET, SOCK_STREAM, 0);
/* :*/
bzero(&serv_addr, sizeof(serv_addr)); //
serv_addr.sin_family = AF_INET; //IPv4
inet_pton(AF_INET, SERV_IP, &serv_addr.sin_addr.s_addr); // IP 3:
serv_addr.sin_port = htons(SERV_PORT); //
/* */
connect(sfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
while (1) {
/* */
fgets(buf, sizeof(buf), stdin);
/* */
write(sfd, buf, strlen(buf)); //
/* */
len = read(sfd, buf, sizeof(buf));
/* */
write(STDOUT_FILENO, buf, len);
}
/* */
close(sfd);
return 0;
}