最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實(shí)現(xiàn)socket簡(jiǎn)單通信實(shí)例

 更新時(shí)間:2014年09月20日 15:13:38   投稿:shichen2014  
這篇文章主要介紹了C語言實(shí)現(xiàn)socket簡(jiǎn)單通信的方法,是學(xué)習(xí)C語言網(wǎng)絡(luò)編程非常基礎(chǔ)而又實(shí)用的實(shí)例,需要的朋友可以參考下

本文實(shí)例講述了C語言實(shí)現(xiàn)socket簡(jiǎn)單通信的方法,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

服務(wù)器端代碼如下:

/*
============================================================================
Name : server.c
Author : king
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdlib.h>
#include <pthread.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h> /* inet(3) functions */

#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>

int handle(int point);

int main(void) {
int sfd, ind;
struct sockaddr_in addr;
struct sockaddr_in clent;
char resv[1024], sendbuf[1024];
char buf[1024];
char * myaddr = "192.168.231.128";

int ret; // 返回值設(shè)置
socklen_t lent;
int pid;
addr.sin_family = AF_INET; //IPv4 Internet protocols

addr.sin_port = htons(5050); //這里輸入服務(wù)器端口號(hào)

addr.sin_addr.s_addr = inet_addr(myaddr);
; //INADDR_ANY表示本機(jī)IP

//獲取socket描述符,IPV4asd
printf("socket start \n");
sfd = socket(AF_INET, SOCK_STREAM, 0);

if (sfd < 0) {
printf("socket error \n");
return -1;
}
printf("bind start \n");
//將套接子與指定端口鏈接
if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) < 0) {
printf("bind error \n");
return -1;
}

//監(jiān)聽套接子
printf("listen start \n");
if (listen(sfd, 1024) < 0) {
printf("listen error \n");
return -1;
}

for (;;) {
//接受來自客戶端的信息
printf("accept start \n");
memset(&clent, 0, sizeof(clent));
lent = sizeof(clent);
ind = accept(sfd, (struct sockaddr *) &clent, &lent);
if (ind < 0) {
printf("accept error %d \n", ind);
return -1;
}

printf("infor \n");
printf("clent addr%s porit %d\n",
inet_ntop(AF_INET, &clent.sin_addr, buf, sizeof(buf)),
ntohs(clent.sin_port));

pid = fork();

if (pid == 0) {
//子進(jìn)程
close(sfd);
handle(ind);
} else if (pid < 0) {
//error
close(ind);
} else {
//父進(jìn)程
}
}

return EXIT_SUCCESS;

}

int handle(int point) {

int retn;
char buf[1024];

for (;;) {
retn = read(point, buf, sizeof(buf));
if (retn < 0) {
printf("read error \n");
close(point);
break;
} else if (retn == 0) {
printf("client exit \n");
close(point);
break;
}

printf("client:%s\n", buf);

if (strcmp("exit", buf) == 0) {
printf("exit \n");
close(point);
return 0;
}
}
return 0;
}

客戶端代碼如下:

/*
 ============================================================================
 Name    : client.c
 Author   : king
 Version   :
 Copyright  : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>    /* inet(3) functions */

int handle(int fd);

int main(void) {

  int nsd;
  char buf[1024];

  char * myaddr = "192.168.231.128";
  struct sockaddr_in addr;

  printf("welcome to echo client\n");
  nsd = socket(AF_INET, SOCK_STREAM, 0);
  printf("connect start1 \n");
  //bzero(addr, sizeof(*addr));
  memset(&addr,0,sizeof(addr));
  printf("connect start2 \n");
  addr.sin_family = AF_INET;
  addr.sin_port = htons(5050);
  addr.sin_addr.s_addr=inet_addr(myaddr);

  printf("connect start3 \n");
  if (connect(nsd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) < 0) {
    printf("connect error \n");
    return -1;
  }

  sleep(5);
  printf("handle start\n");
  handle(nsd);
  close(nsd);
  return EXIT_SUCCESS;
}

int handle(int fd) {

  char sendl[1024], rev[1024];

  int retn;

  for (;;) {

    memset(sendl,0,sizeof(sendl));
    memset(rev,0,sizeof(rev));
    if (fgets(sendl, 1024, stdin) == NULL) {
      break;
    }
    //
    printf("wirte start\n");
    write(fd, sendl, strlen(sendl));
    read(fd, rev,strlen(rev));

  }

  return 0;
}

注意:
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
記住一定是值 addrlen
accept   socklen_t *addrlen要是一個(gè)指針

希望本文所述對(duì)大家C語言網(wǎng)絡(luò)程序設(shè)計(jì)的學(xué)習(xí)有所幫助。

相關(guān)文章

  • vc6.0中c語言控制臺(tái)程序中的定時(shí)技術(shù)(定時(shí)器)

    vc6.0中c語言控制臺(tái)程序中的定時(shí)技術(shù)(定時(shí)器)

    這篇文章主要介紹了vc6.0中c語言控制臺(tái)程序中的定時(shí)技術(shù)(定時(shí)器),需要的朋友可以參考下
    2014-04-04
  • C++中的std::format?如何實(shí)現(xiàn)編譯期格式檢查

    C++中的std::format?如何實(shí)現(xiàn)編譯期格式檢查

    C++?20?的?std::format?是一個(gè)很神奇、很實(shí)用的工具,最神奇的地方在于它能在編譯期檢查字符串的格式是否正確,而且不需要什么特殊的使用方法,只需要像使用普通函數(shù)那樣傳參即可,這篇文章主要介紹了std::format?如何實(shí)現(xiàn)編譯期格式檢查,需要的朋友可以參考下
    2024-04-04
  • C++小知識(shí):用++i替代i++

    C++小知識(shí):用++i替代i++

    今天小編就為大家分享一篇關(guān)于C++小知識(shí):用++i替代i++,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C++ 在堆上開辟與釋放二維、三維指針詳細(xì)解析

    C++ 在堆上開辟與釋放二維、三維指針詳細(xì)解析

    一維指針其實(shí)就相當(dāng)于一維數(shù)組,不用去看書上所說的數(shù)組在內(nèi)存中的首地址這些晦澀的話,以此類推 二維指針就相當(dāng)于二維數(shù)組,新手對(duì)一維數(shù)組的開辟與釋放比較容易熟悉
    2013-09-09
  • C語言實(shí)現(xiàn)高精度加減法

    C語言實(shí)現(xiàn)高精度加減法

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)高精度加減法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C/C++線程退出的四種方法小結(jié)

    C/C++線程退出的四種方法小結(jié)

    本文主要介紹了C/C++線程退出的四種方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C語言實(shí)現(xiàn)字符串操作函數(shù)的實(shí)例

    C語言實(shí)現(xiàn)字符串操作函數(shù)的實(shí)例

    這篇文章主要介紹了C語言實(shí)現(xiàn)字符串操作函數(shù)的實(shí)例的相關(guān)資料,開發(fā)程序的時(shí)候經(jīng)常使用到一些字符串函數(shù),例如求字符串長(zhǎng)度,拷貝字符串……,需要的朋友可以參考下
    2017-08-08
  • C++根據(jù)傳入的函數(shù)指針來解析需要的參數(shù)(推薦)

    C++根據(jù)傳入的函數(shù)指針來解析需要的參數(shù)(推薦)

    C++可以根據(jù)傳入的函數(shù)指針,獲取自己需要的參數(shù)類型,然后根據(jù)參數(shù)源中獲取需要的參數(shù),具體實(shí)現(xiàn)方式大家參考下本文
    2018-05-05
  • 一文掌握 C++ 智能指針的使用方法

    一文掌握 C++ 智能指針的使用方法

    C++11 引入了智能指針的概念,使用了引用計(jì)數(shù)的想法,讓程序員不再需要關(guān)心手動(dòng)釋放內(nèi)存。關(guān)于C++指針得內(nèi)容下面文章將為大家做一個(gè)詳細(xì)介紹
    2021-09-09
  • C++實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)和廣度、深度優(yōu)先遍歷實(shí)例分析

    C++實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)和廣度、深度優(yōu)先遍歷實(shí)例分析

    這篇文章主要介紹了C++實(shí)現(xiàn)圖的鄰接矩陣存儲(chǔ)和廣度、深度優(yōu)先遍歷,實(shí)例分析了C++實(shí)現(xiàn)圖的遍歷技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

开平市| 上林县| 景谷| 田阳县| 灵璧县| 新安县| 徐闻县| 孟津县| 固镇县| 勃利县| 郎溪县| 会东县| 兴国县| 嘉兴市| 同德县| 曲松县| 兴安县| 漳浦县| 涟水县| 宝清县| 色达县| 石家庄市| 绍兴县| 渭南市| 阿拉善左旗| 鸡东县| 宝兴县| 驻马店市| 柳州市| 昆山市| 忻城县| 莱阳市| 贞丰县| 称多县| 榆树市| 松滋市| 新营市| 娄烦县| 宁河县| 汪清县| 南皮县|