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 ...
随机推荐
- Spring XML Bean 定义的加载和注册
前言 本篇文章主要介绍 Spring IoC 容器怎么加载 bean 的定义元信息. 下图是一个大致的流程图: 第一次画图,画的有点烂.
- HAproxy 基础配置
基础配置详解 HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分 global:全局配置段 进程及安全配置相关的参数性能调整相关参数Debug参数 ...
- Spring Cloud 系列之 Consul 注册中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Consul 注册中心(一) 本篇文章讲解 Consul 集群环境的搭建. Consul 集群 上图是一个简单的 Co ...
- 怎么自定义DataGridViewColumn(日期列,C#)
参考:https://msdn.microsoft.com/en-us/library/7tas5c80.aspx 未解决的问题:如果日期要设置为null,怎么办? DataGridView控件提供了 ...
- 简单的Tuple声明和输出
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 核心task
由于Ant具有跨平台的特性,因此编写Ant生成文件时可能会失去一些灵活性.为了弥补这个不足,Ant提供了一个“exec”核心task,允许执行特定操作系统上的命令.
- G - Messy codeforces1262C
题目大意: 输入n和m,n是n个字符,m是m个前缀.对前缀的规定可以配对的括号.比如(),,((()))等等.在输入n个括号字符,对这个n个字符,通过交换使其满足m个前缀.交换次数不限,规则想当与re ...
- 如何防止CDN防护被绕过
当攻击者发现目标站点存在CDN防护的时候,会尝试通过查找站点的真实IP,从而绕过CDN防护.我们来看一个比较常见的基于公有云的高可用架构,如下:CDN(入口层)->WAF(应用层防护)-> ...
- 常见web漏洞整理之进击吧xss!!!
XSS在线测试环境: http://xss-quiz.int21h.jp/ https://brutelogic.com.br/xss.php 这两个站对xss的理解很有帮助!!! 参考链接: htt ...
- python工业互联网监控项目实战5—Collector到opcua服务
本小节演示项目是如何从连接器到获取Tank4C9服务上的设备对象的值,并通过Connector服务的url返回给UI端请求的.另外,实际项目中考虑websocket中间可能因为网络通信等原因出现中断情 ...