昨天弄了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通信的简单例子的更多相关文章

  1. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  2. java 使用 comet4j 主动向客户端推送信息 简单例子

    [背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...

  3. java 网络编程之TCP通信和简单的文件上传功能

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子

    客户端:先创建一个winform窗体的应用程序项目 项目结构

  5. 170410、java Socket通信的简单例子(TCP)

    服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; import java.applet.Applet; pu ...

  6. JAVA基础知识之网络编程——-基于TCP通信的简单聊天室

    下面将基于TCP协议用JAVA写一个非常简单的聊天室程序, 聊天室具有以下功能, 在服务器端,可以接受客户端注册(用户名),可以显示注册成功的账户 在客户端,可以注册一个账号,并用这个账号发送信息 发 ...

  7. 详解Linux服务器最大tcp连接数

    网络编程在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接.那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接在确定最大连接数之 ...

  8. [linux] C语言Linux系统编程-TCP通信的11种状态

    三次握手由client主动发出SYN请求, 此时client处于SYN_SENT状态(第一次握手)当server收到之后会由LISTEN转变为SYN_REVD状态, 并回复client, client ...

  9. 16 Socket通信(简单例子)

      服务端代码: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Da ...

随机推荐

  1. C语言中 sinx cosx 的用法

    #include<stdio.h> #include<math.h> int main() {     double pi=acos(-1.0);     double ang ...

  2. Linux C++ 网络编程学习系列(2)——多路IO之select实现

    select实现多路IO 源码地址:https://github.com/whuwzp/linuxc/tree/master/select 源码说明: server.cpp: 监听127.1:6666 ...

  3. 【LeetCode】23.合并K个排序链表

    题目描述 23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...

  4. 数据结构之栈—强大的四则复杂运算计算器(超过windows自带的科学计算器)【中缀转后缀表达式】

    比windows自带计算器还强的四则复杂运算计算器! 实测随机打出两组复杂算式:-7.5 * 6 / ( -2 + ( -6.5 -  -5.22 ) )与7.5+-3*8/(7+2) windows ...

  5. Hugo博客搭建

    HUGO + Github + Github Action持续集成部署个人博客 HUGO本地环境 首先在HUGO的官网下载Hugo的Windows安装包,然后将路径添加到环境变量即可. step1:下 ...

  6. Java8新特性(1):Lambda表达式

    Lambda表达式可以理解为一种匿名函数:没有名称,但有参数列表.函数主体.返回类型.它是行为参数化的一种实现,行为参数化是指将不同的行为作为参数传递给方法,方法的所具备的能力取决于它接收的行为参数. ...

  7. 移动(appium)自动化测试-爬虫的另一种手段

    appium自动化测试环境搭建: 1.Python环境(推荐2.7)和jdk. 2.Adb工具的下载:自己单独下载adb.夜神模拟器自带和Android sdk 3.Apk安装介质:真机.Androi ...

  8. [nodejs] 同步/异步创建多层目录

    背景 有时项目里需要同时创建多层目录的功能,但低版本的nodejs并没有提供快捷的api 尽管在v10.12.0版本 mkdir() 第二个参数支持recursive 参数,为true时能递归创建,但 ...

  9. mysql5.7免安装版配置

    解压之后,新建一个my.ini 内容是: [mysql] # 设置mysql客户端默认字符集 default-character-set = utf8 [mysqld] #安装目录 basedir = ...

  10. php时间:获取上一个月,本月天数,下一个月

    时间戳转日期 date() 日期转时间戳 strtotime() 当前时间戳time() 获取当前月的天数: $i=; $y=; echo date("t",strtotime(& ...