//网络编程客户端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>//htons()函数头文件
#include <netinet/in.h>//inet_addr()头文件 int main(int arg,char *args[])
{
int st=socket(AF_INET,SOCK_STREAM,);//初始化socket
if(st==-)
{
printf("init socket failed ! error message :%s\n",strerror(errno));
return -;
}
struct sockaddr_in addr;//定义IP地址结构
memset(&addr,,sizeof(addr));
addr.sin_family=AF_INET;//设置结构地址类型为TCP/IP地址
/*
字节转化
网络当中传输数据是以字节为单位,short类型无法在网络中传输,必须转化成网络类型,
例如short类型有2个字节,在网络传输中无法知道哪个是高位字节,那个是低位字节,所以系统提供htons()函数来处理。
所以,在网络中传输非char型数据,必须调用相应的系统函数,将这个类型转化成网络中的char类型。
*/
addr.sin_port=htons();//指定端口号 htons:将short类型从host字节类型到net字节类型转化
/*
IP地址在内存中是一个整数,但是我们习惯于写一个字符串
inet_addr()函数能将一个字符串的IP地址转化成一个int类型数字
*/
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
//调用connect()函数连接结构addr指定的IP地址和端口号
/*
connect()函数第二个参数详解:
struct sockaddr类型是一个比较旧的类型,现在一般都使用struct sockaddr_in类型
但是struct sockaddr和struct sockaddr_in类型是相互兼容的
*/
if(connect(st,(struct sockaddr *)&addr,sizeof(addr))==-)
{
printf("connect failed ! error message :%s\n",strerror(errno));
goto END;
}
char buf[]={};
strcpy(buf,"fly on air !\n");
if(send(st,buf,strlen(buf),)==-)//发送buf中的数据
{
printf("send failed ! error message:%s\n",strerror(errno));
goto END;
}
END:
close(st);
return ;
}
//网络编程服务端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>//htons()函数头文件
#include <netinet/in.h>//inet_addr()头文件 int main(int arg,char *args[])
{
int st=socket(AF_INET,SOCK_STREAM,);//初始化socket
if(st==-)
{
printf("init socket failed ! error message :%s\n",strerror(errno));
return -;
} int on=;
if(setsockopt(st,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on))==-)
{
printf("setsockopt failed ! error message :%s\n",strerror(errno));
goto END;
} struct sockaddr_in addr;
memset(&addr,,sizeof(addr));
addr.sin_family=AF_INET;
//服务端绑定端口号时,需要去系统设置里将该端口号打开
addr.sin_port=htons();
/*
htonl()函数将一个4字节的long类型数据转化成网络类型
*/
addr.sin_addr.s_addr=htonl(INADDR_ANY);//INADDR_ANY代表这个server上所有的地址
//将IP地址与server进行绑定
if(bind(st,(struct sockaddr *)&addr,sizeof(addr))==-)
{
printf("bind IP addr failed ! error message:%s\n",strerror(errno));
goto END;
}
//server开始listen
if(listen(st,)==-)
{
printf("listen failed ! error message :%s\n",strerror(errno));
goto END;
}
int client_st=;//client端socket
struct sockaddr_in clientaddr;//client端的IP地址
char buf[]={};
int i=;
while(i<)
{
memset(&clientaddr,,sizeof(clientaddr));
socklen_t len= sizeof(clientaddr);//表示client地址的最大字节数
/*
accept会阻塞当前线程,直到有客户端连接过来,accept()函数返回client端的socket描述符
*/
client_st=accept(st,(struct sockaddr *)&clientaddr,&len);
if(client_st==-)
{
printf("accept failed ! error message :%s\n",strerror(errno));
goto END;
}
if(recv(client_st,buf,sizeof(buf),)==-)//接收来自client端的消息
{
printf("recv failed , send from IP error message:%s\n",strerror(errno));
close(client_st);//关闭client端socket
goto END;
}
printf("%s",buf);
close(client_st);//关闭client端socket
memset(buf,,sizeof(buf));
i++;
}
END:
close(st);//关闭服务器socket
return ;
}
.SUFFIXES:.c .o
CC=gcc
SRCS1=myclient.c
SRCS2=server.c
OBJS1=$(SRCS1:.c=.o)
OBJS2=$(SRCS2:.c=.o)
EXEC1=mclient
EXEC2=mserver start:$(OBJS1) $(OBJS2)
$(CC) -o $(EXEC1) $(OBJS1)
$(CC) -o $(EXEC2) $(OBJS2)
@echo "-------ok-----------"
.c.o:
$(CC) -Wall -g -o $@ -c $<
clean:
rm -f $(OBJS1)
rm -f $(EXEC1)
rm -f $(OBJS2)
rm -f $(EXEC2)
Linux打开端口号

Linux 网络编程三(socket代码详解)的更多相关文章

  1. Linux网络编程(三)

    Linux网络编程(三) wait()还是waitpid() Linux网络编程(二)存在客户端断开连接后,服务器端存在大量僵尸进程.这是由于服务器子进程终止后,发送SIGCHLD信号给父进程,而父进 ...

  2. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  3. linux网络编程-(socket套接字编程UDP传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

  4. linux高性能服务器编程 (三) --TCP协议详解

    第三章 IP协议详解 TCP协议是TCP/IP协议族中的另外一个重要的协议,与IP协议相比,TCP协议更高进应用层.一些重要的socket选项都和TCP协议相关.这一章主要从如下方面学习: 1)TCP ...

  5. iOS开发——网络编程Swift篇&Alamofire详解

    Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AF ...

  6. 网络编程UDP、TCP详解

    网络编程   网络编程主要用于解决计算机与计算机(手机.平板-)之间的数据传输问题. 1.InetAddress(IP类)   方法: 方法 描述 getLocalHost() 获取本机的IP地址对象 ...

  7. 网络协议之:socket协议详解之Socket和Stream Socket

    目录 简介 Socket是什么 Stream Socket 使用socat创建一个TCP服务器 使用ss检查TCP连接 使用nc连接socket 总结 简介 不管是在普通的网络编程中还是在netty中 ...

  8. Linux网络编程3——socket

    宏定义 首先介绍两个宏定义,看如下代码 代码1 /************************************************************************* & ...

  9. Linux网络编程三、 IO操作

    当从一个文件描述符进行读写操作时,accept.read.write这些函数会阻塞I/O.在这种会阻塞I/O的操作好处是不会占用cpu宝贵的时间片,但是如果需要对多个描述符操作时,阻塞会使同一时刻只能 ...

随机推荐

  1. iOS远程推送之友盟Push

    更新记录: 1.2015年10月23日上午10:10分更新,优化了该类,去除了不必要的方法. ----------------------------------------------------- ...

  2. nim3取石子游戏 (威佐夫博弈)

    http://www.cnblogs.com/jackge/archive/2013/04/22/3034968.html 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有 ...

  3. 【mysql】关于innodb_file_format

    一.几条mysql命令 通过以下命令看一下mysql中 innodb_file_format的配置 mysql> show engines; +--------------------+---- ...

  4. 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”

    摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...

  5. jQuery form插件的使用--处理server返回的JSON, XML,HTML数据

    详细代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> & ...

  6. hdu 2874 Connections between cities [LCA] (lca->rmq)

    Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  7. zip文件jQuery工作地点选择城市代码

    效果 地址下载:http://download.csdn.net/detail/xiaoliu123586/9201925 2.效果 源码:http://download.csdn.net/detai ...

  8. Varchar2 size how to decide?

    When you execute a complicate store procedure, maybe it will execute a long time, maybe you want to ...

  9. web工程 所需是jar包总结

    commons-beanutils-1.8.3.jar : BeanUtils主要提供了对于JavaBean进行各种操作,需要Commons -Collections包和Commons -loggin ...

  10. [转载]ExtJs4 笔记(5) Ext.Button 按钮

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...