[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. 查询 ...
随机推荐
- idea开发工具中你可能不知道的却又比较好用的快捷键
Alt+insert :生成代码 较为常用的是 1.普通Class中生成get set 方法 .生成构造函数.生成spring注入.重写对象的equal.toString.hashcode方法 2.如 ...
- 如何使用ping和tracert命令测试网站访问速度
在我们平时访问的网站中,有一些网站访问速度非常快,比如百度搜索网站和一些门户网站,有些网站访问很慢,有些网站甚至无法访问.那么我们该如何判断这些网站的访问速度呢?下面我们就使用Windows的ping ...
- extjs分组查询
<script type="text/jscript"> var grid; Ext.onReady(function () { Ext.QuickTips.init( ...
- [Tommas] 测试用例覆盖率(二)
二.详细用例的设计 划分好了测试项,接着就是针对各个测试项,考虑具体的测试用例了.根据测试项的特点,测试用例的设计角度也有所不同.下面我们就来看看通常的功能点测试用例,该从哪些角度出发来进行设计: 1 ...
- NGUI如何创建自己的精灵图集
说实话其实很简单,但是在不知道的情况下真的不好弄啊. 1. 选择你要制作精灵图集的图片,可以选择多张 2. 提倡使用快捷键Alt + Shift + M 会有如下窗口弹出,也可以NGUI --> ...
- 设计模式_Flyweight_享元模式
形象例子: 每天跟MM发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了,再不用一个字一个字敲了.共享的句子就是Flywe ...
- 自编译安装nginx
1. 下载nginx,并解压 http://nginx.org/ 2. 下载health check模块 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 1 ...
- leetcode@ [295]Find Median from Data Stream
https://leetcode.com/problems/find-median-from-data-stream/ Median is the middle value in an ordered ...
- android AudioRecord 与 AudioTrack的录音加回放的使用
http://stackoverflow.com/questions/32682952/audiotrack-audiotack-not-playing-fully-recorded-audio
- Delphi给窗体镶边-为控件加边框,描边,改变边框颜色
PS:因为我现在用的电脑是WIN7 64位系统,所以没有实现功能,不知道XP是否可行. //1.定义方法 procedure WMNCPaint(var Msg : TWMNCPaint); mess ...