tcp程序——回声客户端
服务器端
#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程序——回声客户端相关推荐
- 创建收发文件的服务器端 客户端,TCP/IP网络编程 Chap.5 基于TCP的服务器端/客户端(2)...
已知字符串长度情况下完善回声客户端 # gcc echo_client2.c -o eclient2 # ./eclient2 127.0.0.1 9190 Connected Input messa ...
- 四 基于TCP的服务器端/客户端
** 第四章 基于TCP的服务器端/客户端(1) ** 主要内容: 这里我们讨论通过套接字收发数据 1.TCP与UDP的区别数据传输方式不同 2.协议栈的层次关系:链路层->IP层->tc ...
- Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...
TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...
- php soecket服务器搭建_Linux系统编程(32)—— socket编程之TCP服务器与客户端
TCP协议的客户端/服务器程序的一般流程 aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgQAAAJmCAYAAAAjPpjHAAAgAElEQVR4A ...
- python tcp服务器_python实现TCP服务器端与客户端的方法详解
本文实例讲述了python实现TCP服务器端与客户端的方法.分享给大家供大家参考.具体如下: TCP服务器程序(tsTserv.py): from socket import * from time ...
- java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】
进行TCP协议网络程序的编写,关键在于ServerSocket套接字的熟练使用,TCP通信中所有的信息传输都是依托ServerSocket类的输入输出流进行的. TCP协议概念 先来了解一下TCP协议 ...
- java 网络编程(二) tcp传输实现客户端和服务端进行信息交流
1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...
- 全网疯传!Java利用TCP协议实现客户端与服务器通信【附通信源码
目录 TCP协议概念 ServerSocket类 服务器端程序 客户端程序 Hello!大家好哇!我是灰小猿! 上一篇博客和大家分享了在网络编程中要注意的基础知识,关于IP.TCP.UDP以及端口和套 ...
- qt之TCP/IP通信客户端与服务器自动连接互相传输数据
一.前言 在开发上位机软件,用的最多的通信就是网络通信,串口通信和USB通信,串口通信相对是最容易的,USB通信在前面的文章中也专门写了一个博客介绍USB HID通信方式,见链接:https://bl ...
- 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信
基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...
最新文章
- web自动化测试—selenium游览器下拉框操作
- FTP协议及工作原理
- tensorflow中如何进行可视化和减轻过拟合(转)
- ultraedit 运行的是试用模式_原来用Unittest框架写接口测试用例这么简单!
- 杭电oj-----Farm Irrigation(BFS)
- 几种常用的网络传输协议
- js调用qq互联api实现第三方登录
- Pycharm远程连接服务器
- HTTP协议——面试专题
- Android中切换Activity的动画
- Android支持播mp4的文件管理,Android - 简单使用VideoView播放MP4
- 计算机专业自我总结100字,计算机专业学生自我评价100字
- 实训六:Web方式管理交换机
- 开放世界--OpenWorld
- python实现一个很简单的多线程爬虫
- Markdown使用方法、常用技巧汇总
- 利用python实现空格消除
- 打造更具艺术感人像摄影,OPPO R11将携专业人像模式来袭
- Scrapy爬取图片自定义图片文件名时出现的问题
- System.getProperty(user.dir)定位问题
热门文章
- Pytorch安装步骤
- 最小生成树两种方法Prim+kruskal代码模板
- Trie树讲解(例题:ACWING 835,ACWING 143)
- hbase shell 入门
- shell 计算代码运行时间
- lisp的vla函数画矩形_VisualLisp若干自定义函数
- 其他电脑连接本地mysql数据库_在局域网内,如何让其他电脑连接我们自己的本地mysql数据库...
- fiddler 查看接口响应时间
- php POST,HTTP_RAW_POST_DATA, and php://input
- [20180625]10g下查询条件rownum = 0.txt