linux系统socket网络编程学习总结

用到的api
socket();
bind();
listen();
accept();
read();(见文件编程)
write();(见文件编程)
头文件
#include <sys/types.h>
#include <sys/socket.h>
1,socket():用于创建一个socket描述符
头文件
#include <sys/types.h>
#include <sys/socket.h>
函数原型
int socket(int domain, int type, int protocol);
domain:指明所使用的协议族,通常为AF_INET,表示为互联网协议族
type:指定socket的类型,tcp使用SOCK_STREAM。
protocol:一般为0,选择type默认类型
2,bind();
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
sockfd:网络描述符
*addr:是指向本机IP地址和端口号的信息的指针
addrlen:结构体大小

struct sockaddr {
               sa_family_t sa_family;
               char        sa_data[14];
           }

int inet_aton(const char *cp, struct in_addr *inp);把字符串的形式转化为网络能识别的格式
char *inet_ntoa(struct in_addr in);把网络格式的ip地址转化为字符串形式

3, int listen(int sockfd, int backlog);
sockfd:网络描述符,
backlog:最大连接数
4,accept()
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
addr:客户端的详细信息。
addrlen:addr结构体的大小
5,connect()
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
*addr:初始化要连接的网络端口后和IP地址,与bind()相似。
addrlen:addr的大小
服务器

#include<stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h>
#include<stdlib.h>
#include <unistd.h>
#include<string.h>

//       int socket(int domain, int type, int protocol);
int main()
{
//socket
		
	 int s_fd =  socket(AF_INET, SOCK_STREAM,0);
	
	if(s_fd == -1){
			
				perror("socket");
				exit(-1);
			
				}


	struct sockaddr_in s_addr;

	memset(&s_addr,0,sizeof(struct sockaddr_in));


	s_addr.sin_family = AF_INET;
	s_addr.sin_port = htons(8888);
	 inet_aton("192.168.31.73",&s_addr.sin_addr);

//bind

	bind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));


//listen

	listen(s_fd,10);

//accept
	printf("wait connecting\n");



	struct sockaddr_in c_addr;
	memset(&c_addr,0,sizeof(struct sockaddr_in));
	int clen = sizeof(struct sockaddr_in);
	
	int c_fd = accept(s_fd,(struct sockaddr *)&c_addr,&clen);

	if(c_fd == -1){
				perror("accept");
					exit(-1);
					}



	printf("connect,%s\n",inet_ntoa(c_addr.sin_addr));
//read
	char Readbuf[128];
       int nread = read(c_fd, Readbuf,128);
	
	if(nread == -1){
				exit(-1);	
				perror("read");
				}
	else{
			printf("nread:%d,context:%s\n",nread,Readbuf);
				}



//write

	char *Writebuf = "liuxinishandsome";
	 
	int nwrite = write(c_fd, Writebuf,strlen(Writebuf));
	

	return 0;
}

客服端

#include<stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include<netinet/in.h>
#include<stdlib.h>
#include <unistd.h>
#include<string.h>

//       int socket(int domain, int type, int protocol);
int main()
{
//socket
		
	 int c_fd =  socket(AF_INET, SOCK_STREAM,0);
	
	if(c_fd == -1){
			
				perror("socket");
				exit(-1);
			
				}


	struct sockaddr_in c_addr;
	memset(&c_addr,0,sizeof(struct sockaddr_in));


	c_addr.sin_family = AF_INET;
	c_addr.sin_port = htons(8888);
	inet_aton("192.168.31.73",&c_addr.sin_addr);
//connect
//	int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
	int clent = sizeof(struct sockaddr_in);
	if(connect(c_fd,(struct sockaddr *)&c_addr,clent)){
				
				perror("connect");
				exit(-1);
				}
//write send
	char *Writebuf = "get your connection";
	int nwrite = write(c_fd, Writebuf,strlen(Writebuf));


//read
	char Readbuf[128];
       int nread = read(c_fd, Readbuf,128);
	
	if(nread == -1){
				exit(-1);	
				perror("read");
				}
	else{
			printf("nread:%d,context:%s\n",nread,Readbuf);
				}

	 
	

	return 0;
}

例子

师上官可编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值