[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <linux/in.h>
#define PORT 8099
#define BACKLOG 5
void process_conn_server(int s);
int main(int argc, char *argv[])
{
int sock_serv_fd, sock_client_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int err;
pid_t pid;
sock_serv_fd = socket(AF_INET, SOCK_STREAM, 0);
if (sock_serv_fd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
err = bind(sock_serv_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if(err < 0) {
perror("bind");
exit(EXIT_FAILURE);
}
err = listen(sock_serv_fd, BACKLOG);
if (err < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
for(;;) {
int addrlen = sizeof(struct sockaddr);
sock_client_fd = accept(sock_serv_fd, (struct sockaddr *)&client_addr, &addrlen);
if (sock_client_fd < 0)
continue;
pid = fork();
if (pid == 0) {
close(sock_serv_fd);
process_conn_server(sock_client_fd);
} else {
close(sock_client_fd);
}
}
}
void process_conn_server(int s)
{
ssize_t size = 0;
char buffer[1024];
for(;;) {
size = read(s, buffer, 1024);
if (size == 0)
return;
sprintf(buffer, "Server: %ld bytes readed\n", size);
write(s, buffer, strlen(buffer)+1);
}
}
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <linux/in.h>
#define PORT 8099
void process_conn_client(int s)
{
ssize_t size = 0;
char buffer[1024];
for(;;) {
size = read(0, buffer, 1024);
if (size > 0) {
write(s, buffer, size);
size = read(s, buffer, 1024);
write(1, buffer, size);
}
}
}
int main(int argc, char **argv)
{
int sfd;
struct sockaddr_in server_addr;
int err;
if (argc != 2) {
printf ("Usage: %s <ip_address>\n", argv[0]);
exit(EXIT_FAILURE);
}
sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
inet_pton(AF_INET, argv[1], &server_addr.sin_addr);
connect(sfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
process_conn_client(sfd);
close(sfd);
}