您的位置:首页 > 理论基础 > 计算机网络

unix 服务器篇之基本 Tcp c/s架构

2014-05-21 09:52 253 查看
c/s架构是最为基础的网络构件。 各个平台,各个语言中,socket tcp网络编程最为基本的就是

服务器:

socket() //创建socket

bind() // 绑定地址

listen() // 监听端口

accept() // 接受请求

send()

recv()

客户端:

socket() // 创建socket

connect() // 连接到服务器

send() // 发送消息

recv() //接收消息

代码如下

#include "../sock.h"
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <time.h>

#define BUFSIZE 1024
#define LISTENQ 5
int main(int argc, char *argv[])
{
int listen_sockfd, client_sockfd;
int len;
struct sockaddr_in client_addr, server_addr;
int sin_size;
time_t ticks;

char write_buf[BUFSIZE] = { 0 };
char read_buf[BUFSIZE] = { 0 };

listen_sockfd = Socket(AF_INET, SOCK_STREAM, 0);

server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(8000);

Bind(listen_sockfd, (struct sockaddr *) &server_addr,
sizeof(server_addr));
Listen(listen_sockfd, LISTENQ);

while (1) {
len = sizeof(client_addr);
client_sockfd =
Accept(listen_sockfd, (struct sockaddr *) &client_addr, &len);
inet_ntop(AF_INET, &client_addr.sin_addr, read_buf,
sizeof(read_buf));
fprintf(stdout, "connect from %s:\t%d\n", read_buf,
htons(client_addr.sin_port));
memset(read_buf, 0, BUFSIZE);
if ((len = recv(client_sockfd, read_buf, sizeof(read_buf), 0)) > 0) {
read_buf[len] = '\0';
fprintf(stdout, "%s\n", read_buf);
fflush(stdout);
}
ticks = time(NULL);
snprintf(write_buf, sizeof(write_buf), "%s", ctime(&ticks));
send(client_sockfd, write_buf, strlen(write_buf), 0);

close(client_sockfd);
}
close(listen_sockfd);
return 0;
}


客户端:

#include <stdio.h>
#include "../sock.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>

#define BUFSIZE 1024
int main()
{
int server_sock;
int port = 80;
struct sockaddr_in server_addr;
char write_buf[BUFSIZE] = { 0 };
char read_buf[BUFSIZE] = { 0 };

server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(8000);

server_sock = Socket(AF_INET, SOCK_STREAM, 0);
Connect(server_sock, (struct sockaddr *) &server_addr,
sizeof(struct sockaddr));

sprintf(write_buf, "hello");
send(server_sock, write_buf, strlen(write_buf), 0);
recv(server_sock, read_buf, BUFSIZE, 0);
printf("%s\n", read_buf);
fflush(stdout);
close(server_sock);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: