#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的更多相关文章

  1. Linux 简单socket实现UDP通信

    服务器端 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sy ...

  2. Linux 简单socket实现TCP通信

    服务器端代码 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <stri ...

  3. Linux C Socket编程原理及简单实例

    部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1.   什么是TCP/IP.UDP? 2.   Socket在哪里 ...

  4. linux中socket的理解

    对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...

  5. Linux内核socket优化项

    Linux内核socket优化项 vi /etc/sysctl.confnet.core.netdev_max_backlog = 30000  每个网络接口接收数据包的速率比内核处理这些包的速率快时 ...

  6. 提高 Linux 上 socket 性能

      http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化   1 引言    随着In ...

  7. LInux下socket编程学习笔记

    1.socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...

  8. linux c socket programming

    原文:linux c socket programming http://54min.com/post/http-client-examples-using-c.html 好文章 PPT http:/ ...

  9. Linux学习之十七-配置Linux简单的脚本文件自启动

    配置Linux简单的脚本文件自启动 在Linux中使用shell脚本解决一些问题会比单独执行多条命令要有效率,脚本文件规定命名以.sh结尾,最基本的规则就是其内容是命令,想要脚本文件开机自启动,就需要 ...

随机推荐

  1. 深度学习论文笔记-Deep Learning Face Representation from Predicting 10,000 Classes

    来自:CVPR 2014   作者:Yi Sun ,Xiaogang Wang,Xiaoao Tang 题目:Deep Learning Face Representation from Predic ...

  2. [Canvas] Make Canvas Responsive to Pixel Ratio

    Canvas is great for high performance graphics rendering but by default the results look blocky on ph ...

  3. [MODx] 1. Add Html5 template into the MODx

    1. Connet MODx by SSH: Go to the MODx cloud; Find you current user and right click selet Edit Cloud; ...

  4. js中常用属性备忘

    . onsubmit一般用来做验证的,用来控制表单提交的. 之前使用数据提交基本上使用ajax做数据提交,在数据验证的时候,只有通过数据验证之后,才会post/get数据到对应api文件,但是这次涉及 ...

  5. 几个常用myeclipse快捷键

    Ctrl + D:直接删除光标所在行 Alt + ↑:向上移动光标所在行 Alt + ↓:向下移动光标所在行 Ctrl + Alt + ↑:直接向上复制光标所在行内容 Ctrl + Alt + ↓:直 ...

  6. struts2.1笔记04:struts2优点

  7. 前端必会css整理

    1.设置css样式的三种方式?         外部样式表,引入一个外部css文件         内部样式表,将css代码放在<head>标签内部         内联样式,将css样式 ...

  8. 给jdk写注释系列之jdk1.6容器(7)-TreeMap源码解析

    TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解.      要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链 ...

  9. 经常被忽略的几个CSS3属性之强大应用(一、timing-function: steps() 二、animation-direction  三、timing-function: cubic-bezier())

    一.timing-function: steps() 一开始在使用CSS3的时候并没有太注意这个timing-function,只是注意到自定义贝塞尔曲线. 1)一个项目中的实例 先来看看左边加了st ...

  10. 关于IE8不支持document.getElementById().innerHTML的问题

    document.getElementById("id").innerHTML = (showinfo);//IE8不支持. 可以用Jquery来解决这个问题: $('#id'). ...