Linux ---> 简单socket
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h> #define SERVPORT 3333 //服务端口
#define BACKLOG 10 //最大连接数 int main(void)
{
int sockfd; //监听的socket
if((sockfd=socket(AF_INET,SOCK_STREAM,))==-)
{
printf("socket 创建失败!");
exit();
}
printf("创建监听socket成功!\n"); struct sockaddr_in myAddr; //本机地址信息的结构体 /*配置本机socket连接有关信息*/
myAddr.sin_family=AF_INET;
myAddr.sin_port=htons(SERVPORT);
myAddr.sin_addr.s_addr=INADDR_ANY; //任意地址
bzero(&(myAddr.sin_zero),); //填充0,保持大小一致 if(bind(sockfd,(struct sockaddr*)&myAddr,sizeof(struct sockaddr))==-) //将创建的socket和有关本机socket配置绑定
{
printf("bind 出错!");
exit();
}
printf("socekt绑定成功!\n"); /*下面listen,使socket处于被动监听模式,并为该socket建立一输入数据队列,将到达的服务请求保存在此队列,直到程序处理它们*/
printf("服务端开始listen......\n");
int lisVal=listen(sockfd,BACKLOG);
printf("zhi %d",lisVal);
if(lisVal==-)
{
printf("listern 出错!");
exit();
}
printf("------listen is ok----");
while()
{
struct sockaddr_in remoteAddr; //客户端地址信息
int clientFd; //数据传输socket
int sin_size=sizeof(struct sockaddr_in);
printf("----------");
if((clientFd=accept(sockfd,(struct sockaddr*)&remoteAddr,&sin_size))==-) //服务器接受客户的连接请求
{
printf("accept erro!");
continue;
} printf("收到一个连接来自:%s\n",inet_ntoa(remoteAddr.sin_addr)); //将网络地址转换成“.”点隔的字符串格式。 if(!fork()) //创建一个子进程
{
char* msg="连接上了,来自服务端的消息。\n";
if(send(clientFd,msg,sizeof(msg),)==-) //子进程向这个连接发送一条信息
{
printf("send 出错!");
close(clientFd);
exit();
}
}
close(clientFd);
}
}
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h> #define SERPORT 3333 //服务端口
#define MAXDATASIZE 100 //每次最大数据传输量
char* DES="127.0.0.1";//"192.168.1.101"; //目的地地址 int main(int argc,char* *argv[])
{ /*
if(argc<2)
{
printf("未输入服务器地址!\n");
exit(1);
}
*/
struct hostent * host; //服务端信息结构体
int sockfd; //socket标识 if((host=gethostbyname(DES))==NULL) //argv[1]
{
printf("gethostbyname错误!\n");
exit();
} printf("目的地址为:%s\n",host->h_name); if((sockfd=socket(AF_INET,SOCK_STREAM,))==-)
{
printf("创建socket失败!\n");
exit();
}
printf("创建socket成功!\n"); /*配置目的地址信息*/
struct sockaddr_in servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(SERPORT);
servAddr.sin_addr=*((struct in_addr *)host->h_addr);
bzero(&(servAddr.sin_zero),); if(connect(sockfd,(struct sockaddr *)&servAddr,sizeof(struct sockaddr))==-) //发起连接
{
printf("连接出错\n");
exit();
}
printf("连接成功!\n"); int recvbytes=; //收到的字节数
char buf[MAXDATASIZE]; //缓冲区 if((recvbytes=recv(sockfd,buf,MAXDATASIZE,))==-)
{
printf("接收出错!\n");
exit();
} buf[recvbytes]='\0';
printf("recvbytes值:%d \n收到信息:%s\n",recvbytes,buf);
printf("结束\n");
close(sockfd); return ;
}
Linux ---> 简单socket的更多相关文章
- Linux 简单socket实现UDP通信
服务器端 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sy ...
- Linux 简单socket实现TCP通信
服务器端代码 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <stri ...
- Linux C Socket编程原理及简单实例
部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1. 什么是TCP/IP.UDP? 2. Socket在哪里 ...
- linux中socket的理解
对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...
- Linux内核socket优化项
Linux内核socket优化项 vi /etc/sysctl.confnet.core.netdev_max_backlog = 30000 每个网络接口接收数据包的速率比内核处理这些包的速率快时 ...
- 提高 Linux 上 socket 性能
http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化 1 引言 随着In ...
- LInux下socket编程学习笔记
1.socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...
- linux c socket programming
原文:linux c socket programming http://54min.com/post/http-client-examples-using-c.html 好文章 PPT http:/ ...
- Linux学习之十七-配置Linux简单的脚本文件自启动
配置Linux简单的脚本文件自启动 在Linux中使用shell脚本解决一些问题会比单独执行多条命令要有效率,脚本文件规定命名以.sh结尾,最基本的规则就是其内容是命令,想要脚本文件开机自启动,就需要 ...
随机推荐
- oracle internal :VIEW: X$KCBLDRHIST - Direct Read HISTory
WebIV:View NOTE:159900.1 Note (Sure) - Note Mods - Note Refs Error ORA 600 TAR TAR-Info Bug B ...
- Masonry+Infinite-Scroll实现无刷新无分页完美瀑布流(转)
一.Masonry 是基于Jquery插件,用于对CSS布局的可移动层进行重新布局.Masonry愿意石工,可以这样形象的理解,页面上很多大小不一的移动层可以想象成散乱的石头,经过Masonry这个石 ...
- ActionScript 3 中的强制类型转换
以前AS中是这样进行强制类型转换的:假设有一个类叫做Class1,我们声明了一个它的对象 c1,如果想要将它转换成Class2类型,只要这样写: Class2(c1); 在AS3中你依然可以这样写,但 ...
- javascript类,对象,实例
在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型一.由一对大括号括起来var emptyObj = {}; var myObj = { ...
- QTP 中对象操作
1.创建对象(将浏览器设置为一个对象) set oIE=createobject("internetexplorer.application") 2.将浏览器设置为可见的 oIE. ...
- iOS,面试必看,最全梳理
序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了.今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态 ...
- Direct3D-3 四元数
其实本来这篇文章是打算接上篇的各种变化矩阵的推导了,想了想,还是先讲四元数吧.本人的文章并不会提到欧拉角,因为我自己没弄懂欧拉角的万向锁问题. 很多人学习数学时,会有这样一个疑惑,这东 ...
- 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析
前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈. 什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶 ...
- HTML5 indexedDB数据库的入门学习(一)
笔者早些时间看过web sql database,但是不再维护和支持,所以最近初步学习了一下indexedDB数据库,首先indexedDB(简称IDB)和web sql database有很大的差别 ...
- Flex RPC错误整理 转
http://wenku.baidu.com/link?url=l2T80q4OXOIvUEmVn97XL-By9_GClgHMDmY5fuu-XSmQDqH56_AUa19pjbdA_SlwhFnu ...