socket简单通信
粗糙简略的初版,后续多加点功能权当练手
/*
============================================================================
Name : server.c
Author : king
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdlib.h>
#include <pthread.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h> /* inet(3) functions */ #include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <string.h> int handle(int point); int main(void) {
int sfd, ind;
struct sockaddr_in addr;
struct sockaddr_in clent;
char resv[], sendbuf[];
char buf[];
char * myaddr = "192.168.231.128"; int ret; // 返回值设置
socklen_t lent;
int pid;
addr.sin_family = AF_INET; //IPv4 Internet protocols addr.sin_port = htons(); //这里输入服务器端口号 addr.sin_addr.s_addr = inet_addr(myaddr);
; //INADDR_ANY表示本机IP //獲取socket描述符,IPV4asd
printf("socket start \n");
sfd = socket(AF_INET, SOCK_STREAM, ); if (sfd < ) {
printf("socket error \n");
return -;
}
printf("bind start \n");
//将套接子与指定端口链接
if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) < ) {
printf("bind error \n");
return -;
} //监听套接子
printf("listen start \n");
if (listen(sfd, ) < ) {
printf("listen error \n");
return -;
} for (;;) {
//接受来自客户端的信息
printf("accept start \n");
memset(&clent, , sizeof(clent));
lent = sizeof(clent);
ind = accept(sfd, (struct sockaddr *) &clent, &lent);
if (ind < ) {
printf("accept error %d \n", ind);
return -;
} printf("infor \n");
printf("clent addr%s porit %d\n",
inet_ntop(AF_INET, &clent.sin_addr, buf, sizeof(buf)),
ntohs(clent.sin_port)); pid = fork(); if (pid == ) {
//子进程
close(sfd);
handle(ind);
} else if (pid < ) {
//error
close(ind);
} else {
//父进程
}
} return EXIT_SUCCESS; } int handle(int point) { int retn;
char buf[]; for (;;) {
retn = read(point, buf, sizeof(buf));
if (retn < ) {
printf("read error \n");
close(point);
break;
} else if (retn == ) {
printf("client exit \n");
close(point);
break;
} printf("client:%s\n", buf); if (strcmp("exit", buf) == ) {
printf("exit \n");
close(point);
return ;
}
}
return ;
}
/*
============================================================================
Name : client.c
Author : king
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/ #include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h> /* inet(3) functions */ int handle(int fd); int main(void) { int nsd;
char buf[]; char * myaddr = "192.168.231.128";
struct sockaddr_in addr; printf("welcome to echo client\n");
nsd = socket(AF_INET, SOCK_STREAM, );
printf("connect start1 \n");
//bzero(addr, sizeof(*addr));
memset(&addr,,sizeof(addr));
printf("connect start2 \n");
addr.sin_family = AF_INET;
addr.sin_port = htons();
addr.sin_addr.s_addr=inet_addr(myaddr); printf("connect start3 \n");
if (connect(nsd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) < ) {
printf("connect error \n");
return -;
} sleep();
printf("handle start\n");
handle(nsd);
close(nsd);
return EXIT_SUCCESS;
} int handle(int fd) { char sendl[], rev[]; int retn; for (;;) { memset(sendl,,sizeof(sendl));
memset(rev,,sizeof(rev));
if (fgets(sendl, , stdin) == NULL) {
break;
}
//
printf("wirte start\n");
write(fd, sendl, strlen(sendl));
read(fd, rev,strlen(rev)); } return ;
}
虽然写程序写了好几年,感觉还是技术不过关,于是把socket从新复习了下,
期间遇到错误一直没有编译过去:
connect和accept
因为没有深刻了解这两函数的参数,所以酿成打错
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
记住一定是值 addrlen
accept socklen_t *addrlen要是一个指针
这俩个郁闷死我了,我以为是一样的,结果调了1小时。
还需努力啊。
socket简单通信的更多相关文章
- 【转】Qt Socket简单通信
最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信. 1.UDP通信 UDP没有特定的server端和cl ...
- 基于TCP 协议的socket 简单通信
DNS 服务器:域名解析 socket 套接字 : socket 是处于应用层与传输层之间的抽象层,也是一组操作起来非常简单的接口(接受数据),此接口接受数据之后,交由操作系统 为什么存在 soc ...
- Python网络编程-Socket简单通信(及python实现远程文件发送)
学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...
- C语言实现Socket简单通信
环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等. 分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客 ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- 使用Socket进行通信
客户端通常可使用Socket的构造器来连接到指定服务器,Socket通常可使用如下两个构造器. Socket(lnetAddress/String remoteAddress , int port ...
- java socket报文通信(一)socket的建立
java socket报文通信(一) socket的建立 今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Contro ...
- Eclipse搭建服务器,实现与Android的简单通信
---恢复内容开始--- 目标:实现客户端(Android App)与服务器(PC)的简单通信 相关准备:eclipse_mars.tomcat8.Android Studio 实现: 1.java环 ...
- .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序
.NET 跨平台RPC框架DotNettyRPC DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...
随机推荐
- mysql 关键字bug
今天运行语句 select * from order; 出现bug: ERROR 1064 (42000): You have an error in your SQL syntax; check t ...
- [转]MySQL 5.6 全局事务 ID(GTID)实现原理(二)
原文连接:http://qing.blog.sina.com.cn/1757661907/68c3cad333002qsk.html 原文作者:淘长源 转载注明以上信息 前文 MySQL 5.6 全局 ...
- vim编辑器参数(不熟参数)
-1 vim配置文件 全局配置:/etc/vimrc 个人配置:~/.vimrc -2 :set下相关常用参数 ic 忽略大小写 noic 不忽略(默认) ai 自动缩进 noai 不自动缩进(默 ...
- AlarmReceiver 与IntentService的使用
1:GetSmsService.java public class GetSmsService extends IntentService{ private AlarmManager alarmMan ...
- JS 函数中返回另一个函数
function createComparisonFunction(propertyName) { return function (object1, object2) { var value1 = ...
- LeetCode_Jump Game
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 手机三种SIM卡 你所不知道的剪卡“秘密”
SIM卡物理尺寸的发展是逐渐轻薄化,尺寸逐渐缩小的一个过程,最早手机中的卡都是2FF,2003年国际标准提出3FF,当前很多终端都使用这种形态的卡,4FF在2011年的国际标准会议中提出,2012年纳 ...
- OpenStack Keystone v3 API新特性
原连接 http://blog.chinaunix.net/uid-21335514-id-3497996.html keystone的v3 API与v2.0相比有很大的不同,从API的请求格式到re ...
- hdu 5493 Queue(线段树)
Problem Description N people numbered to N are waiting in a bank for service. They all stand in a qu ...
- 在php添加mongo过程中出现的mongo.so: > undefined symbol: php_json_encode in Unknown on line 0. After installation mongo driver for php 的错误
3 down vote my system is centos 6.3. I got the problem solved. vim /etc/php.ini then add extension=j ...