您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7907|回复: 1

[C] C语言学习之Linux下TCP服务器与客户端的实现

[复制链接]
发表于 2020-5-9 02:20:24 | 显示全部楼层 |阅读模式
客户端代码如下:# Z1 {5 }4 k% e3 H: ]
  1. #include- N5 Z1 n* l9 q, W7 y- r& C
  2. #include7 G. _5 |9 A( g  h) x* E8 q
  3. #include7 ]' Z8 b4 E4 l  Z: k4 T0 @! l
  4. #include  o, Z$ p6 [4 N$ g3 u7 z
  5. #include
    6 \/ a( S6 T  k8 K, E
  6. #include( y* }2 p0 h* _; ]9 j0 A9 P  q
  7. #include6 u7 b4 p" s4 J& b; r
  8. #include
复制代码

2 S. |3 a/ S* s# Z) n9 @% Z9 e5 E, P2 m: @
服务器代码如下:
& i3 ^( B4 Q3 M# [
  1. #include! ?9 O; G6 b2 d  V$ y$ P! L( {+ Q/ V
  2. #include+ \9 a& ]9 p2 r+ C0 h: l1 p: E
  3. #include
    8 t' |* h0 K2 t
  4. #include! ]. n5 ^/ V1 z4 I
  5. #include
    ! h$ n% c* n! i. F4 J
  6. #include
    7 X1 h* O- c8 d
  7. #include
      H/ C( Y0 W1 l) }# M
  8. #include
复制代码
. V$ P* @. Z5 i) d! ~' {8 M' p
& Z+ B1 x2 a! X1 J9 C
/ a6 i' x0 z4 I( ?$ w
( M9 M+ P0 S0 y  O
! C& M3 z. y: |3 Q; O: T7 K' A& ^

/ Q% a& v5 i( Z  o5 h2 s6 O3 f  w# ?& L8 q
* e) O, W! U- |9 T6 A# {% ~
  ^5 L+ V$ ^+ ^
/ a) h& \% c' A0 z. _

  C3 q+ |. L8 }- X- F2 A: ~
# E: |0 B7 e# T( U8 Y* U
* l8 o- X  m* }' O; E5 E

9 x* [' o5 D( F' n6 U2 d! Y% A# n9 P7 U) z' U- C

+ n8 _3 q5 @$ I- {9 y+ @, l$ \" j: b5 S+ Z4 u

% v" O' P0 y/ S$ o- I4 m7 D2 _* R* ^  j: a& x3 y- y2 c$ W
- I, x4 ]# X; m' E! u5 ?
 楼主| 发表于 2020-5-9 02:30:12 | 显示全部楼层
服务端:
: o: Y# d$ _( D( m$ c6 L#include <sys/types.h> 
8 k! `0 R8 {8 p$ x( I0 f7 O; ?#include <sys/socket.h> / {5 v# M, s& r# v
#include <unistd.h> 
* c3 q+ R$ ], o" p" n/ \( H+ a#include <netinet/in.h> $ Q. Z# c5 A  L2 X! S5 F
#include <arpa/inet.h> 7 b* B# H& |, n" \- J% z  w
#include <string.h> 
( [# s1 C8 f% Z% S#include <stdio.h>  & f1 v8 n, T1 C) @% ?5 A
int main() {
- B  a! N( X- M        int sockClient;( H2 |/ H" G! w2 v. _3 w
        struct sockaddr_in addrSrv;
2 g  b; x( o6 D2 w  A        sockClient = socket(AF_INET,SOCK_DGRAM,0);8 y( Z- R2 J7 p  \& f  |( M3 W6 C
        addrSrv.sin_addr.s_addr=inet_addr("127.0.0.1");4 O& |; F0 F+ K9 _9 }: M' E
        addrSrv.sin_family=AF_INET;
7 s. `8 {& X: L2 S1 l        addrSrv.sin_port=htons(6000);& M. @" g8 \/ H8 {
        while(1)$ L7 v$ k  c' I; q6 Y' Y: x. D
        {
. n( m+ @1 L% V9 o- K" \                sendto(sockClient,"Hello World",strlen("Hello World")+1,0,(struct sockaddr*)&addrSrv,sizeof(struct sockaddr));
- W* f2 a8 q# O  ?% |3 H                sleep(2);. `: u5 ]3 q* c  j) p
        }    
) e. [7 p# _5 f+ q        close(sockClient);  " o7 m2 N9 [: R  q
        return 0; / T/ p) c9 N: Y- e: a$ }
}
# O$ ^1 z9 p: U, W6 `- ?' q3 S2 k6 _7 e& ~7 d
% x% ~+ m- `  u+ e: x
客户端:
  1. #include <stdio.h> 
    4 d7 }, M' {3 a6 g. }
  2. #include <sys/types.h> ( @3 J9 K+ n, U0 W  c% d3 |( A4 i
  3. #include <sys/socket.h> 
    2 C$ }3 C5 K' t$ Y- }
  4. #include <netinet/in.h> ' d+ w1 q1 e6 F7 }" \* w
  5. #include <arpa/inet.h> 
      T) v( n; v/ {' Q2 E! }! l
  6. #include <string.h> 
    $ h2 t( z: b  A$ `6 S
  7. #include <unistd.h> % a0 T' L+ C7 D! J& R
  8. #include <fcntl.h> 5 L4 b9 H/ u1 |- ^2 j+ l
  9. #include <sys/time.h> 
    % n( M" s3 f6 N0 O, r; P8 K" o4 l( X
  10. #include <sys/select.h> : J" f- V9 {. D% X8 _9 r0 o# J' m7 G8 e" W
  11. #include <sys/ioctl.h>  + G3 j* B: H/ z3 N$ A1 A
  12. int main() {
    : Y$ g1 Z' S! c" e0 m# k) Z/ G
  13.         int sockSrv;2 A  f$ ]% y6 T( A% [
  14.         struct sockaddr_in addrSrv;  V% |* ?2 _! t1 b, P
  15.         int len;
    * r6 M( ^) m  u* i( [
  16.         char recvBuf[100];  h. v) s6 u# y
  17.         scanf("%s",recvBuf);6 {; `5 x% a+ \; {" u, Z
  18.         struct sockaddr_in addrClient;
    / Y# U% z9 `+ |% ?( d- b2 c
  19.         sockSrv = socket(AF_INET,SOCK_DGRAM,0);1 L! ^3 V0 _5 Q2 w/ z# G
  20.         addrSrv.sin_addr.s_addr = htonl(INADDR_ANY);5 Z1 D3 _9 j) H! i
  21.         addrSrv.sin_family = AF_INET;
    # S& q  b# Q" J+ z, v' O- ~
  22.         addrSrv.sin_port = htons(6000);/ b) J, x4 a( \) w) i* H" \& P
  23.         bind(sockSrv, (struct sockaddr *)&addrSrv, sizeof(struct sockaddr));4 f6 ~/ {- S! x( O* v9 {5 D
  24.         len = sizeof(struct sockaddr);
    , N0 \! ]" v! G
  25.         memset(recvBuf, 0, 100);
    / \! ?% H( B+ X% [( m6 S
  26.         recvfrom(sockSrv, recvBuf, 100, 0, (struct sockaddr *)&addrClient,&len);% s5 P: O6 Y" Z* q) f5 q
  27.         printf("客户端的IP地址:%s\r\n",inet_ntoa(addrClient.sin_addr));! r9 H4 L- v5 j8 n0 G8 I
  28.         printf("Client data is:%s\n",recvBuf);
    ; o2 z$ R# D+ d: \- V# K. `! E
  29.         close(sockSrv);
    $ S" E& l: d1 G: M4 D% c+ n7 X3 a
  30.         return 0;
    ( m7 H5 d! K( D9 B
  31. } 
复制代码

7 e' D  `7 p; N: y8 Z& t! u: j! K& g* F% ~: o- D
" A1 b, x- Z# ?: L- d# z
/ y9 H) ^" s1 v
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-3-29 07:21 , Processed in 0.108135 second(s), 19 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!