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 ...
随机推荐
- Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。
题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...
- go中的线程的实现模型-P G M的调度
线程实现模型 go中线程的实现是依靠 P G M M machine的缩写.一个M代表一个内核线程,或称“工作线程” P processor的缩写.一个P代表执行一个Go代码片段所需要的资源(或称“上 ...
- CentOS安装C函数库的man帮助
安装linux可能没有安装C的man帮助, 像我安装时选择的是最小化安装就没有, 网上的大多是ubunu的安装方式,或者是C++的man帮助, 都不适合,那么CentOS安装C man手册的方法就是: ...
- 查看jdk 线程 日志
命令:jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令 这些命令 必须 在 linux jdk bin 路径 下执行 eq: ./jstack 10303 即可 如果想把 ...
- Jenkins 批量创建任务的三种方法
最近,要搭建多套测试环境,需要把 Jenkins 中 dev 视图下的所有任务批量复制到 sit 等视图下. 说明 Jenkins 任务名称规则为:[测试环境标识]-[工程名称],如:dev-daod ...
- day28作业
import os import uuid import pickle from conf import settings class School: def __init__(self,name,a ...
- 阿里Canal框架数据库同步-实战教程
一.Canal简介: canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 二.背景介绍: ...
- HashMap之KeySet分析
本篇涵盖 1.HashMap并不是用keySet来存储key的原因及证明 2.keySet方法返回后的remove.add操作原理 一.方法作用 概括一下 1.keySet方法返回map中包含的键的集 ...
- 4.加密与token(node+express)
一. 敏感数据加密1.安装并引入中间件 npm install utility const utils = require('utility')2.加密方法 function ...
- [linux] linux的top命令参数详解
简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按 ...