linux 服务器/客户端 tcp通信的简单例子
昨天弄了sublime之后没有弄输入中文的了,学生党来着,刚好可以练练英语(英语渣渣,还要考六级),所以注释都写英文的(语法什么的就别太深究了)
服务器端:
/*start from the very beginning,and create greatness
@name:Chuangwei Lin
@E-mail:979951191@qq.com
@brief:a simple example about server/client link(server c file)
*/
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <linux/in.h>
#define PORT 8888 //port to listen
#define BACKLOG 2 //the length of listen queue
void process_conn_server(int s);
int main(int argc, char const *argv[])
{
int ss,sc; //ss:server's socket file descriptor;sc:client's socket file descriptor
struct sockaddr_in server_addr; //server's address struct
struct sockaddr_in client_addr; //use to save client's address
int err; //the return value
pid_t pid; //the process ID
//create a socket
ss = socket(AF_INET,SOCK_STREAM,0);
if (ss < 0) //error
{
printf("socket error\n");
return -1;
}
//set the server address
bzero(&server_addr,sizeof(server_addr)); //clear
server_addr.sin_family = AF_INET; //protocol family
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//local address
server_addr.sin_port = htons(PORT); //server port
//binging
err = bind(ss,(struct sockaddr*)&server_addr,sizeof(server_addr));
if (err < 0)
{
printf("bind error\n");
return -1;
}
//listening
err = listen(ss,BACKLOG);
if (err < 0)
{
printf("listen error\n");
return -1;
}
//the main loop
for (;;)
{
int addrlen = sizeof (struct sockaddr);
sc = accept(ss,(struct sockaddr*)&client_addr,&addrlen); //accept the client's connecting
if (sc < 0)
{
continue; //if error,finish this time loop
}
//create a new process to process the connecting
pid = fork();
if (0 == pid)
{
close(ss); //close listen in the child process
process_conn_server(sc); // process
}
else
{
close(sc); //close accept in the parent process
}
}
return 0;
}
//the process function
void process_conn_server(int s)
{
ssize_t size = 0 ;
char buffer[1024]; //data buffer
for(;;)
{
size = read(s,buffer,1024); //read data from socket and put in buffer
if (0 ==size) //if no data
{
return; //return
}
sprintf(buffer,"%d bytes altogether\n",size); //send the number of data return
write(s,buffer,strlen(buffer)+1);
}
}
客户端:
/*start from the very beginning,and create greatness
@name:Chuangwei Lin
@E-mail:979951191@qq.com
@brief:a simple example about server/client link(client c file)
*/
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <linux/in.h>
#define PORT 8888 //port to listen
void process_conn_client(int s);
int main(int argc, char const *argv[])
{
int s; //s:socket descriptor
struct sockaddr_in server_addr; // server address
int err;
//create a socket
s = socket(AF_INET,SOCK_STREAM,0);
if (s < 0)
{
printf("socket error\n");
return -1;
}
//set the server address
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET; //protocol family
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //local address
server_addr.sin_port = htons(PORT); //server port
//change the user input char IP to int
inet_pton(AF_INET,argv[1],&server_addr.sin_addr);
//conneting the server
connect(s,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));
process_conn_client(s);
close(s);
return 0;
}
void process_conn_client(int s)
{
ssize_t size = 0 ;
char buffer[1024]; //data buffer
for(;;)
{
//get data from standard input
size = read (0,buffer,1024);
if(size > 0)
{
write(s,buffer,size); //send to server
size = read(s,buffer,1024); //read from server
write(1,buffer,size); //write to standard output
}
}
}
很简单的一段,只是建立连接然后客户端发送字符然后服务器统计后返回
linux 服务器/客户端 tcp通信的简单例子的更多相关文章
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- java 使用 comet4j 主动向客户端推送信息 简单例子
[背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...
- java 网络编程之TCP通信和简单的文件上传功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子
客户端:先创建一个winform窗体的应用程序项目 项目结构
- 170410、java Socket通信的简单例子(TCP)
服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; import java.applet.Applet; pu ...
- JAVA基础知识之网络编程——-基于TCP通信的简单聊天室
下面将基于TCP协议用JAVA写一个非常简单的聊天室程序, 聊天室具有以下功能, 在服务器端,可以接受客户端注册(用户名),可以显示注册成功的账户 在客户端,可以注册一个账号,并用这个账号发送信息 发 ...
- 详解Linux服务器最大tcp连接数
网络编程在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接.那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接在确定最大连接数之 ...
- [linux] C语言Linux系统编程-TCP通信的11种状态
三次握手由client主动发出SYN请求, 此时client处于SYN_SENT状态(第一次握手)当server收到之后会由LISTEN转变为SYN_REVD状态, 并回复client, client ...
- 16 Socket通信(简单例子)
服务端代码: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Da ...
随机推荐
- Linux网络篇,ssh原理及应用
一.对称加密与非对称加密 对称加密: 加密和解密的秘钥使用的是同一个. 非对称加密: 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥:简称公钥和私钥 对称加密 对称加密的密 ...
- Docker 常用命令(.NET Core示例)
Docker安装 CentOS Docker 安装 安装 Docker Desktop for Mac.Docker Desktop for Windows 设置docker仓库镜像加速器 迁移Doc ...
- openpyxl 模块 读写Excel
import openpyxl #写到execl中def write_execl(): book=openpyxl.Workbook() sheet=book.active #获取默认sheet # ...
- 一、华为模拟器eNSP下载与安装教程
简单介绍一下 eNSP: eNSP是一款由华为提供的免费的图形化网络仿真工具平台,它将完美呈现真实设备实景(包括华为最新的ARG3路由器和X7系列的交换机),支持大型网络模拟,让你有机会在没有真实设备 ...
- springIoc中的单列对象的分析
最近有个同事去面试,其中有一个问题是关于spring单例的.本篇博文就发表一下小编我自己的理解~~. 使用过spring的程序猿应该都知道,我们的bean(controller.service和Dao ...
- AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)
AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...
- Android 修改应用程序字体
在网上搜索了相关资料,研究了两种算是比较快速的改变程序字体的方法,好,先来介绍着两种方法. 首先第一种方法是重写控件(以Textview为例): 1.Android在写程序的时候谷歌早已将所有字体都默 ...
- 5000+图片找到你喜欢的那个TA,Python爬虫+颜值打分
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 罗罗攀 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...
- D - Harmonious Graph
题目大意: n个点,m条边,两个数l和r,如果l和r相连接,那么对于l和r之间值任意一个数都要和l相连.问达到这一目的需要添加的边的最小数量. 题解: 我们首先要找到当前连通块中最大的那个点,也就是说 ...
- python selenium模块 xpath定位
''' 附w3xpath语法地址 https://www.w3school.com.cn/xpath/xpath_syntax.asp 总结: 返回匹配到所有符合条件的第一个节点,对象是 <cl ...