C语言客户端服务器代码
/* sockclnt.c*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /*for struct sockaddr_in*/
#include <signal.h>
#define SVR_IP "12.12.12.221"
#define SVR_PORT 1234
#define BUFSIZE 255
int sockfd = 0;
void mysigint(int sig)
{
printf("close fd = %d\n",sockfd);
close(sockfd);
}
int main()
{
signal(5,mysigint);
int ret = 0;
struct sockaddr_in svr_addr;
memset(&svr_addr, 0, sizeof(struct sockaddr_in));
char * msg = "'path:/home/dongshen/media_file/b_1.ts'";
// create client socket fd
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket failed");
exit(1);
}
// connet to server
svr_addr.sin_family = AF_INET;
svr_addr.sin_port = htons(SVR_PORT);
svr_addr.sin_addr.s_addr = inet_addr(SVR_IP);
printf("before connect\n");
ret = connect(sockfd, (struct sockaddr *)&svr_addr, sizeof(struct sockaddr_in));
if (ret == -1) {
perror("connect failediiiii");
exit(1);
}
printf("after connect\n");
int i = 0;
for (i = 0; i < 500; i++)
{
char * msg = "hello server....";
printf("client send msg: %s\n", msg);
if((send(sockfd, msg, strlen(msg), 0))<0)
{
perror("send()");
}
char recv_buf[BUFSIZE] = {0};
int recv_len = recv(sockfd, recv_buf, sizeof(recv_buf), 0);
printf("client recv msg: %s%d\n", recv_buf, recv_len);
sleep(100);
}
close(sockfd);
}
服务端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> /* for struct sockaddr_in*/
#include <sys/errno.h>
#include <signal.h>
#define SVR_IP "12.12.12.221"
#define SVR_PORT 1234
#define BACKLOG 10
#define MAX_BUF_LEN 1024
int connfd = 0;
void mysigint(int sig)
{
printf("sigint i will close connfd = %d\n",connfd);
close(connfd);
}
void chld_handle(int sig)
{
pid_t pid;
int stat;
while ((pid = waitpid(-1, &stat, WNOHANG)) > 0)
{
printf("child %d terminated\n", pid);
}
return;
}
int main()
{
struct sigaction act;
act.sa_handler = chld_handle;
sigemptyset(&act.sa_mask);
act.sa_flags = SA_RESTART;
sigaction(SIGCHLD, &act, 0);
int listenfd = 0;
int ret = 0;
struct sockaddr_in svr_addr, cli_addr;
memset(&svr_addr, 0, sizeof(struct sockaddr_in));
memset(&cli_addr, 0, sizeof(struct sockaddr_in));
// create listen socket fd
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd == -1) {
perror("socket failed");
exit(1);
}
// bind svr ip and port
svr_addr.sin_family = AF_INET;
svr_addr.sin_port = htons(SVR_PORT);
svr_addr.sin_addr.s_addr = inet_addr(SVR_IP);
ret = bind(listenfd, (struct sockaddr*)&svr_addr, sizeof(struct sockaddr));
if (ret == -1) {
perror("binad failed");
exit(1);
}
// listen client
ret = listen(listenfd, BACKLOG);
if (ret == -1) {
perror("listen failed");
exit(1);
}
printf("server is on...\n");
while(1)
{
int sin_size = sizeof(struct sockaddr_in);
if((connfd = accept(listenfd, (struct sockaddr *)&cli_addr, &sin_size)) < 0)
{
perror("accept failed");
if (errno == EINTR)
{
perror("child process cause it\n");
continue;
}
else
{
break;
}
}
pid_t child_pid = fork();
if (0 == child_pid) // this is child process
{
close(listenfd);
printf("one socket(%d) client come\n", connfd);
signal(SIGINT,mysigint);
char recv_buf[MAX_BUF_LEN] = {0};
int recv_len = 0;
while((recv_len = recv(connfd, recv_buf, sizeof(recv_buf), 0)) > 0)
{
printf("svr %d recv %s recv_len %d\n", connfd, recv_buf, recv_len);
ret = send(connfd, recv_buf, strlen(recv_buf), 0);
if (ret < 0)
{
perror("send failed");
exit(1);
}
memset(recv_buf, 0, sizeof(recv_buf));
}
if (recv_len < 0)
{
perror("recv failed");
exit(1);
}
printf("one socket(%d) client go\n", connfd);
close(connfd);
exit(0);
}
close(connfd);
}
close(listenfd);
return 0;
}
C语言客户端服务器代码的更多相关文章
- TCP通信的客户端代码实现和TCP通信的服务器代码实现
TCP通信的客户端代码实现 package com.yang.Test.ServerStudy; import java.io.*; import java.net.Socket; /** * TCP ...
- 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码
原文出处: 平凡之路的博客 欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...
- Rserve详解,R语言客户端RSclient【转】
R语言服务器程序 Rserve详解 http://blog.fens.me/r-rserve-server/ Rserve的R语言客户端RSclient https://blog.csdn.net/u ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- C# WebSocket 服务端示例代码 + HTML5客户端示例代码
WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...
- linux创建SVN客户端,服务器
1- linux基本都自带svn 2-创建svn服务器 新创建服务器代码仓库 # svnadmin create serversvn 这样,我们就在~/目录下新建了版本库serverSvn. 3-修改 ...
- Linux 下 简单客户端服务器通讯模型(TCP)
原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...
- phpstorm-----实现实时编辑服务器代码
phpstorm是一款功能强大.广大码农钟爱的编辑器,也是我最常用的编辑器.这里介绍一个偷懒的功能. 用sftp协议与远程服务器相连接,实现直接编辑服务器代码的功能.而效果就是ctrl+s不仅可以保存 ...
- Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译
Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...
随机推荐
- [转]详细的mysql时间和日期函数
这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...
- C# 语言规范_版本5.0 (第5章 变量)
1. 变量 变量表示存储位置.每个变量都具有一个类型,用于确定哪些值可以存储在该变量中.C# 是一种类型安全的语言,C# 编译器保证存储在变量中的值总是具有合适的类型.通过赋值或使用 ++ 和 ‑‑ ...
- c++的复制构造函数
在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”): 1) 一个对象作为函数参数,以值传递的方式传入函数体: 2) 一个对象作为函数返回值,以值传递的方式从函数返回: 3) 一个 ...
- 一些牛人分享的ios技巧,保留着
摘要:记录一些网上非常牛的人写的博文.收藏起来. 以备日后需要时学习备用. 1:iOS中UIWebView的Javascript与Objective-C通信 http://imchao.net/201 ...
- CSV文件解析工具
package com.common.util; import java.io.BufferedReader; import java.io.FileInputStream; import java. ...
- CVE-2014-1767 漏洞分析(2015.1)
CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...
- 对端口Com1的访问被拒绝
某项目中,需通过com口的方式读取CF卡的rfid,. 问题:当我关闭模块,然后第二次打该模块时,弹出如下错误”对端口Com1的访问被拒绝”(编程这一行业,不是找不到对象,就是被xxx拒绝!): 断点 ...
- 《JavaScript高级程序设计》读书笔记 ---基本概念小结
ECMAScript 中的基本数据类型包括Undefined.Null.Boolean.Number 和String. 与其他语言不同,ECMScript 没有为整数和浮点数值分别定义不同的数据 ...
- ios UIApplocation 中APP启动方式
iOS app启动的方式有哪些: 自己启动(用户手动点击启动) urlscheme启动(关于urlScheme的详解)http://www.cnblogs.com/sunfuyou/p/6183064 ...
- 命令窗口修改编码,CMD编码修改方法
cmd中的编码方式为ANSI,若中文不是此编码方式则会出现乱码.作为程序员,会经常使用命令窗口查看执行日志,但是有时编码格式不对,大部分都是UTF8,在网上搜索了不少方法,很多没什么用,在这里教一个具 ...