找回密码
 注册
关于网站域名变更的通知
查看: 243|回复: 1
打印 上一主题 下一主题

如何进行Linux网络编程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-10-9 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1、 tcp程序设计
0 r0 w  Q$ {' V+ o$ T( c$ _0 R; [% W1 w* c; {
代码1 server:
& L: J2 _1 V- g3 D! z. `3 O4 r  F2 w1 Y: f& ]
  • #include <stdlib.h>
  • #include <stdio.h>
  • #include <errno.h>
  • #include <string.h>
  • #include <netdb.h>
  • #include <sys/types.h>
  • #include <netinet/in.h>
  • #include <sys/socket.h>
  • #define portnumber 3333
  • int main(int argc, char *argv[])
  • {
  •    int sockfd, new_fd;
  •    struct sockaddr_in server_addr;
  •    struct sockaddr_in client_addr;
  •    int sin_size;
  •    int nbytes;
  •    char buffer[1024];
  •    //AF_INET: IPV4, SOCK_STREAM: TCP
  •    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  •     {
  •         fprintf(stderr, "Socket error:%s\n\a", strerror(errno));
  •        exit(1);
  •     }
  •    bzero(&server_addr, sizeof(struct sockaddr_in));
  •    server_addr.sin_family = AF_INET;
  •    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  •    server_addr.sin_port = htons(portnumber);
  •    if(bind(sockfd, (struct sockaddr *) (&server_addr), sizeof(structsockaddr)) == -1)
  •     {
  •        fprintf(stderr, "Bind error: %s\n\a", strerror(errno));
  •        exit(1);
  •     }
  •    if(listen(sockfd, 5) == -1)
  •     {
  •        fprintf(stderr, "Listen error: %s\n\a", strerror(errno));
  •        exit(1);
  •     }
  •    while(1)
  •     {
  •        sin_size = sizeof(struct sockaddr_in);
  •        if((new_fd = accept(sockfd, (struct sockaddr *)(&client_addr),&sin_size)) == -1)
  •        {
  •             fprintf(stderr, "Accept error:%s\n\a", strerror(errno));
  •            exit(1);
  •        }
  •        fprintf(stderr, "Server get connection from %s\n",(char*)inet_ntoa(client_addr.sin_addr));
  •        if((nbytes = read(new_fd, buffer, 1024)) == -1)
  •         {
  •            fprintf(stderr, "Read Error: %s\n", strerror(errno));
  •            exit(1);
  •        }
  •        buffer[nbytes] = '\0';
  •        printf("Server received %s\n", buffer);
  •        close(new_fd);
  •     }
  •    close(sockfd);
  •    return 0;
  • }
    + S7 b4 |1 K9 G; \, O: _2 ^
/ d9 r9 w: _" p) n
3 x9 A7 [0 P/ y" H0 r
6 q) Z: f/ i# V/ }6 |; l
代码2 client:; K. }  t. ]) s8 C; L) T( ^8 L# O! z

8 v3 N7 r8 w* Z* k9 A: R% |& J. P
  • #include <stdlib.h>
  • #include <stdio.h>
  • #include <errno.h>
  • #include <string.h>
  • #include <netdb.h>
  • #include <sys/types.h>
  • #include <netinet/in.h>
  • #include <sys/socket.h>
  • #define portnumber 3333
  • int main(int argc, char *argv[])
  • {
  •    int sockfd;
  •    char buffer[1024];
  •    struct sockaddr_in server_addr;
  •    struct hostent *host;
  •    if(argc != 2)
  •     {
  •        fprintf(stderr, "Usage: %s hostname \a\n", argv[0]);
  •        exit(1);
  •     }
  •    if((host = gethostbyname(argv[1])) == NULL)
  •     {
  •         fprintf(stderr, "Gethostname Error:%s\a\n", strerror(errno));
  •        exit(1);
  •     }
  •    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  •     {
  •        fprintf(stderr, "Socket Error: %s\a\n", strerror(errno));
  •        exit(1);
  •     }
  •    bzero(&server_addr, sizeof(server_addr));
  •    server_addr.sin_family = AF_INET;
  •    server_addr.sin_port = htons(portnumber);
  •    server_addr.sin_addr = *((struct in_addr *) host->h_addr);
  •    if(connect(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr))== -1)
  •     {
  •        fprintf(stderr, "Connect Error: %s\a\n", strerror(errno));
  •        exit(1);
  •     }
  •    printf("Please input char: \n");
  •    fgets(buffer, 1024, stdin);
  •    write(sockfd, buffer, strlen(buffer));
  •    close(sockfd);
  • return 0;
  • }2 k+ W* B8 _* h2 a9 F

  U1 I2 y0 s' B" _, U

& L! ]$ z* H  M( a) |3 y+ Y3 W6 ]" b: g
Makefile:
% _% m& v: P7 Y* y+ Q' U, Y: S
; p2 y8 [: @% ^) ~
  • CC = gcc
  • CURTDIR = $(shell pwd)
  • TARGET = tcp_client
  • #TARGET = tcp_server
  • %.o:%.c
  •        $(CC)-c $(EXTRAFLAGS) $< -o $@
  • %.o:%.S
  •        $(CC)-c $(EXTRAFLAGS) $< -o $@
  • .PHONY: all clean
  • $(TARGET): $(TARGET).o
  •        $(CC)  -o $@ $^
  • clean:
  •        rm-RF $(TARGET) $(TARGET).o
    % c5 ^' J( J* d% D

4 Z3 K" i% V& Y* Q- F# Q

  d3 c- ?+ x' B! T8 E6 A+ d) i  h: W/ A* k! S2 ^) b7 z
运行结果:
游客,如果您要查看本帖隐藏内容请回复

7 m1 e( I2 [4 C1 |9 _- R6 F3 r% w
# h6 ^# r; e1 s& a, o6 [
' K& w& z. |* ~9 ~: _
% W# r8 @+ A) ?2 y" \

. H- j* i0 r0 @% z
9 {, B1 g% M5 N7 X* m, H1 z

该用户从未签到

2#
发表于 2019-10-9 18:48 | 只看该作者
看看如何进行Linux网络编程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 00:44 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表