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

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值