服务器端

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 1024void error_handling(char *message);int main(int argc, char *argv[])
{int serv_sock;int clnt_sock;struct sockaddr_in serv_addr;struct sockaddr_in clnt_addr;socklen_t clnt_addr_size;int str_len;char message[BUF_SIZE];if(argc!=2){printf("Usage: %s <port>\n", argv[0]);exit(1);}puts("socket()...");serv_sock = socket(PF_INET, SOCK_STREAM, 0);if(serv_sock==-1)error_handling("socket() error");memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);serv_addr.sin_port = htons(atoi(argv[1]));puts("bind()...");if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)error_handling("bind() error");puts("listen()...");if(listen(serv_sock, 5)==-1)error_handling("listen() error");//同一个时刻只能连接一个客户端while(1){//连接客户端puts("wait accept()...");clnt_addr_size = sizeof(clnt_addr);clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);if(clnt_sock==-1)error_handling("accept() error");elseputs("accepted");//从客户端读取信息,并返回给客户端while((str_len=read(clnt_sock,message,BUF_SIZE))!=0){puts("read() and write() message");write(clnt_sock, message, str_len);}//关闭客户端close(clnt_sock);puts("closed");}close(serv_sock);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n',stderr);perror("[error]");exit(1);
}

客户端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 1024void error_handling(char *message);int main(int argc, char *argv[])
{int sock;struct sockaddr_in serv_addr;char message[BUF_SIZE];int str_len;if(argc!=3){printf("Usage: %s <host> <port>\n",argv[0]);exit(1);}puts("socket()...");sock = socket(PF_INET, SOCK_STREAM, 0);if(sock==-1)error_handling("socket() error");memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr(argv[1]);serv_addr.sin_port = htons(atoi(argv[2]));puts("connect()...");if(connect(sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)error_handling("bind() error");elseputs("connected...");while(1){fputs("Input message(Q to quit): ",stdout);fgets(message, BUF_SIZE, stdin);if(strcmp(message,"q\n")==0 || strcmp(message,"Q\n")==0)break;puts("write() and read() message");write(sock,message,strlen(message));str_len = read(sock, message, BUF_SIZE-1);if(str_len==-1)error_handling("read() error");message[str_len] = 0;printf("Message from server: %s\n",message);}close(sock);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n',stderr);exit(1);
}

运行

./server 54321

./client 127.0.0.1 54321

参考

  • TCP/IP网络编程,尹圣雨

tcp程序——回声客户端相关推荐

  1. 创建收发文件的服务器端 客户端,TCP/IP网络编程 Chap.5 基于TCP的服务器端/客户端(2)...

    已知字符串长度情况下完善回声客户端 # gcc echo_client2.c -o eclient2 # ./eclient2 127.0.0.1 9190 Connected Input messa ...

  2. 四 基于TCP的服务器端/客户端

    ** 第四章 基于TCP的服务器端/客户端(1) ** 主要内容: 这里我们讨论通过套接字收发数据 1.TCP与UDP的区别数据传输方式不同 2.协议栈的层次关系:链路层->IP层->tc ...

  3. Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...

    TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...

  4. php soecket服务器搭建_Linux系统编程(32)—— socket编程之TCP服务器与客户端

    TCP协议的客户端/服务器程序的一般流程 aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgQAAAJmCAYAAAAjPpjHAAAgAElEQVR4A ...

  5. python tcp服务器_python实现TCP服务器端与客户端的方法详解

    本文实例讲述了python实现TCP服务器端与客户端的方法.分享给大家供大家参考.具体如下: TCP服务器程序(tsTserv.py): from socket import * from time ...

  6. java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】

    进行TCP协议网络程序的编写,关键在于ServerSocket套接字的熟练使用,TCP通信中所有的信息传输都是依托ServerSocket类的输入输出流进行的. TCP协议概念 先来了解一下TCP协议 ...

  7. java 网络编程(二) tcp传输实现客户端和服务端进行信息交流

    1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...

  8. 全网疯传!Java利用TCP协议实现客户端与服务器通信【附通信源码

    目录 TCP协议概念 ServerSocket类 服务器端程序 客户端程序 Hello!大家好哇!我是灰小猿! 上一篇博客和大家分享了在网络编程中要注意的基础知识,关于IP.TCP.UDP以及端口和套 ...

  9. qt之TCP/IP通信客户端与服务器自动连接互相传输数据

    一.前言 在开发上位机软件,用的最多的通信就是网络通信,串口通信和USB通信,串口通信相对是最容易的,USB通信在前面的文章中也专门写了一个博客介绍USB HID通信方式,见链接:https://bl ...

  10. 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信

    基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...

最新文章

  1. web自动化测试—selenium游览器下拉框操作
  2. FTP协议及工作原理
  3. tensorflow中如何进行可视化和减轻过拟合(转)
  4. ultraedit 运行的是试用模式_原来用Unittest框架写接口测试用例这么简单!
  5. 杭电oj-----Farm Irrigation(BFS)
  6. 几种常用的网络传输协议
  7. js调用qq互联api实现第三方登录
  8. Pycharm远程连接服务器
  9. HTTP协议——面试专题
  10. Android中切换Activity的动画
  11. Android支持播mp4的文件管理,Android - 简单使用VideoView播放MP4
  12. 计算机专业自我总结100字,计算机专业学生自我评价100字
  13. 实训六:Web方式管理交换机
  14. 开放世界--OpenWorld
  15. python实现一个很简单的多线程爬虫
  16. Markdown使用方法、常用技巧汇总
  17. 利用python实现空格消除
  18. 打造更具艺术感人像摄影,OPPO R11将携专业人像模式来袭
  19. Scrapy爬取图片自定义图片文件名时出现的问题
  20. System.getProperty(user.dir)定位问题

热门文章

  1. Pytorch安装步骤
  2. 最小生成树两种方法Prim+kruskal代码模板
  3. Trie树讲解(例题:ACWING 835,ACWING 143)
  4. hbase shell 入门
  5. shell 计算代码运行时间
  6. lisp的vla函数画矩形_VisualLisp若干自定义函数
  7. 其他电脑连接本地mysql数据库_在局域网内,如何让其他电脑连接我们自己的本地mysql数据库...
  8. fiddler 查看接口响应时间
  9. php POST,HTTP_RAW_POST_DATA, and php://input
  10. [20180625]10g下查询条件rownum = 0.txt