[001]socket通信--server和client实现迭代的简单例子
server端:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h> #define BUFF_SIZE 1024
void error_handling(char* message); void error_handling(char* message) {
fputs(message, stderr);
fputc('\n', stderr);
exit();
} int main(int argc, char **argv)
{
int serv_sock;
int clnt_sock;
char message[BUFF_SIZE];
int i,str_len; //设置一个server地址serv_addr,client地址clnt_addr
struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
socklen_t clnt_addr_size = sizeof(clnt_addr); memset(&serv_addr, , sizeof(serv_addr));
memset(&serv_addr, , sizeof(serv_addr)); if (argc != ) {
printf("Usage : %s <port>\n", argv[]);
exit();
} //创建用于internet的流协议(TCP)socket
serv_sock = socket(PF_INET, SOCK_STREAM, );
if (serv_sock == -) {
error_handling("socket() error");
} serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[])); //把socket和socket地址结构联系起来
if( bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -) {
error_handling("bind() error");
} //server_socket用于监听
if ( listen(serv_sock, ) == -) {
error_handling("lisen() error");
} // 受理连接请求
for (i = ; i < ; i++) {
clnt_sock = accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size);
if ( clnt_sock == -) {
error_handling("accept() error");
} else {
printf("connected client %d \n", i+);
} while((str_len = read(clnt_sock, message, BUFF_SIZE)) != ) {
write(clnt_sock, message, str_len);
} close(clnt_sock);
}
close(serv_sock); return ;
}
client端:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h> #define BUFF_SIZE 1024
void error_handling(char* message); void error_handling(char* message) {
fputs(message, stderr);
fputc('\n', stderr);
exit();
} int main(int argc, char **argv) {
int sock;
struct sockaddr_in serv_addr;
char message[BUFF_SIZE];
int str_len;
memset(&serv_addr, , sizeof(serv_addr)); if (argc != )
{
printf("Usage: /%s <IP> <Port>\n",argv[]);
exit();
} //创建用于internet的流协议(TCP)socket
sock = socket(PF_INET, SOCK_STREAM, );
if (sock == -) {
error_handling("socket() error");
} //设置一个socket地址结构client_addr,代表客户机internet地址, 端口
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(argv[]);
serv_addr.sin_port = htons(atoi(argv[])); //把socket和socket地址结构联系起来
if( connect(sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -) {
error_handling("connect() error");
} else {
printf("connected.......\n");
} while() {
fputs("Input mesage(Q to quit) : ", stdout);
fgets(message, BUFF_SIZE, stdin); if (!strcmp(message, "q\n") || !strcmp(message, "Q\n")) {
break;
} write(sock, message, strlen(message));
str_len = read(sock, message, BUFF_SIZE - );
message[str_len] = ;
printf("Message from server : %s \n", message);
}
close(sock);
return ;
}
[001]socket通信--server和client实现迭代的简单例子的更多相关文章
- [000]socket通信--server和client实现的简单例子
在C语言中就学过scanf和printf,其实理解socket就跟这两个输入输出差不多,只不过是信息的传输而已. 1.TCP服务器端(server)的默认函数调用顺序: 按照上述的调用顺序,我们可以来 ...
- libevent 实现的socket 通信 server以及解决找不到动态库的方法
注: client 个人觉得没必要用 libvent来实现就没写 注:由于 涉及到回调函数的使用 如有疑惑的可以先去了解回调函数的实现机理 先来说一下 libevent主要是干啥的 : 内部封装了 s ...
- java 记录一下socket的server与client
package com.test.server; import java.io.IOException; import java.net.ServerSocket; import org.apache ...
- Python中Socket编程server与client简单的合法性认证
导入python自带的hmac模块对随机生成的位数32字节和自定义token进行加密处理 import osmsg = os.urandom(32) #随机生成msgOut[4]: b"F ...
- Linux下C语言socket通信实现发送读取的文件内容--简单实现代码
本次代码涉及到的内容:socket通讯,文件读取 读取的文件以及文件位置: 要读取的文件和c文件在同一个目录下.客户端(client)读取的是123.xml,服务端(server)读取的是23.xml ...
- Android简单实现Socket通信,client连接server后,server向client发送文字数据
案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...
- day36——死锁、递归锁、信号量、GIL、多线程实现socket通信、线程池和进程池
day36 死锁现象与递归锁 死锁现象 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...
- Python socket 通信功能简介
常用的地址家族AF_UNIX:基于文件,实现同一主机不同进程之间的通信AF_INET:基于网络,适用于IPv4AF_INET6:基于网络,使用于IPv6 常见的连接类型SOCK_STREAM:即TCP ...
- 分析一个socket通信: server/client
分析一个socket通信: server/client1 server 1. 创建一个server_socket文件,并绑定端口,然后监听端口 (socket, bind, listen) 2. 查询 ...
随机推荐
- Dataguard Content
1.Dataguard环境设计的三个重要概念 1.1 Primary数据库 在Data Guard的环境中与Standby数据库对应的数据库即是Primary数据库,也就是Primary数据库正在运行 ...
- table点击一行显示下一行的特效
效果体验:http://sandbox.runjs.cn/show/rw4vq8zo <!doctype html> <html> <head> <meta ...
- 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理
1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...
- java中的快捷键
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...
- ccr1
Concurrency and Coordination Runtime Jeffrey Richter Code download available at:ConcurrentAffairs200 ...
- [selenium webdriver Java]使用自定义条件同步测试
Selenium WebDriver可以结合ExpectedCondition类来定义自己期望的条件 创建一个新的ExpectedCondition接口,必须实现apply方法 等待元素出现 publ ...
- OWASP Top 10 – 2013, 最新十大安全隐患(ASP.NET解决方法)
OWASP(开放Web软体安全项目- Open Web Application Security Project)是一个开放社群.非营利性组织,目前全球有130个分会近万名会员,其主要目标是研议协助解 ...
- redhat mysql 远程开启
2)开启远程接入.登录到数据库,对mysql.user进行操作 表Mysql.user记录了不同用户不同主机不同的权限.可通过命令查看: Select * from mysql.user : 插入新用 ...
- 解决:Eclipse导入工程后全是错误,连基本类型都不识别
当初在大学没时间完成作业时,总是喜欢网上搜一个或者拷贝同学的一个工程过来,导入到Eclipse中却全是红叉,连基本类型都不识别. 当时就纳闷了,难道是天要亡我之心不死?后来慢慢了解了,其实是导入的工程 ...
- CenOS中下载RPM包
在实施部署时,往往服务器环境无外网或无法访问国外网址.这是可以在本机虚拟机的CentOS环境中下载RPM. 方法一:yum yum命令本身就可以用来下载一个RPM包,标准的yum命令提供了--down ...