int socket(int domain, int type,?int protocol);
頭文件:? #include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
int skt_tcpfd;
int domain;
skt_tcpfd=socket(AF_INET,SOCK_STREAM,0);
?int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
頭文件:? #include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
int retval;
?struct sockaddr_in {
sa_family_t ? ?sin_family; /* address family: AF_INET */
in_port_t ? ? ?sin_port; ? /* port in network byte order */
struct in_addr sin_addr; ? /* internet address */
};
?/* Internet address */
struct in_addr {
uint32_t ? ? ? s_addr; ? ? /* address in network byte order */
};
const struct sockaddr *address;
?struct sockaddr_in addr_info;
addr_info.sin_family=AF_INET;
addr_info.sin_port=htons(6666);
addr_info.sin_addr.s_addr=htonl(INADDR_ANY);
(struct sockaddr *)&addr_info;
retval=bind(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addrinfo));
int listen(int socket, int backlog);
頭文件?#include <sys/socket.h>
int backlog最大監聽數量
listen(skt_tcpfd,100)
int accept(int socket, struct sockaddr *restrict address,
socklen_t *restrict address_len);
頭文件?#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
struct sockaddr *restrict address;
?struct sockaddr_in {
sa_family_t ? ?sin_family; /* address family: AF_INET */
in_port_t ? ? ?sin_port; ? /* port in network byte order */
struct in_addr sin_addr; ? /* internet address */
};
?/* Internet address */
struct in_addr {
uint32_t ? ? ? s_addr; ? ? /* address in network byte order */
};
struct sockaddr_in address;
(struct sockaddr *)&address;
socklen_t *restrict address_len;
socklen_t len=sizeof(address);
int clt_tcpfd=accept(skt_tcpfd,(struct sockaddr *)&address,&len);
int connect(int socket, const struct sockaddr *address,
socklen_t address_len);
頭文件:#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
?struct sockaddr_in {
sa_family_t ? ?sin_family; /* address family: AF_INET */
in_port_t ? ? ?sin_port; ? /* port in network byte order */
struct in_addr sin_addr; ? /* internet address */
};
?/* Internet address */
struct in_addr {
uint32_t ? ? ? s_addr; ? ? /* address in network byte order */
};
const struct sockaddr *address;
?struct sockaddr_in addr_info;
addr_info.sin_family=AF_INET;
addr_info.sin_port=htons(6666);
addr_info.sin_addr.s_addr=inet_addr("192.168.41.186");
(struct sockaddr *)&addr_info;
? ?int retval=connect(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addr_info));
示例:TCP_server.c
#include <stdio.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
int main()
{int skt_tcpfd;printf("創建TCP套接字文件描述符\n");skt_tcpfd=socket(AF_INET,SOCK_STREAM,0);//if(skt_fd==-1)//{// perror("創建TCP套接字文件描述符失敗");//}int retval;//struct sockaddr_in {// sa_family_t sin_family; /* address family: AF_INET */// in_port_t sin_port; /* port in network byte order */// struct in_addr sin_addr; /* internet address */// };struct sockaddr_in addr_info;addr_info.sin_family=AF_INET;addr_info.sin_port=htons(6666);addr_info.sin_addr.s_addr=htonl(INADDR_ANY);//int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);printf("綁定端口號與IP地址\n");retval=bind(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addr_info));//if(retval==-1)//{// perror("綁定端口號及IP地址失敗");//}printf("開起監聽,最大監聽數量為100\n");retval=listen(skt_tcpfd,100);//if(retval==-1)//{// perror("綁定端口號及IP地址失敗");//}//int accept(int socket, struct sockaddr *restrict address,// socklen_t *restrict address_len);struct sockaddr_in address;socklen_t len = sizeof(address);int clt_tcpfd=accept(skt_tcpfd,(struct sockaddr *)&address,&len);//if(clt_tcpfd==-1)//{// perror("接收客戶端失敗");//}char rbuf[1024];ssize_t rd;while(1){memset(rbuf,0,sizeof(rbuf));rd=read(clt_tcpfd,rbuf,sizeof(rbuf));if(rd==-1){perror("server:客戶端通信異常\n");return -1;}if(rd==0){printf("server:客戶端斷開連接\n");break;}printf("客戶端發送了%ld字節的消息為:%s\n",rd,rbuf);}close(clt_tcpfd);close(skt_tcpfd);
}
示例:TCP_client.c
#include <stdio.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/ip.h>int main()
{int skt_tcpfd;printf("創建TCP套接字文件描述符\n");skt_tcpfd=socket(AF_INET,SOCK_STREAM,0);//if(skt_fd==-1)//{// perror("創建TCP套接字文件描述符失敗");//}//struct sockaddr_in {// sa_family_t sin_family; /* address family: AF_INET */// in_port_t sin_port; /* port in network byte order */// struct in_addr sin_addr; /* internet address */// };int retval;struct sockaddr_in addr_info;addr_info.sin_family=AF_INET;addr_info.sin_port=htons(6666);addr_info.sin_addr.s_addr=inet_addr("192.168.41.186");//int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);printf("綁定端口號與IP地址\n");retval=connect(skt_tcpfd,(struct sockaddr *)&addr_info,sizeof(addr_info));//if(retval==-1)//{// perror("綁定端口號及IP地址失敗");//}char wbuf[1024];ssize_t wr;while(1){scanf("%s",wbuf);wr=write(skt_tcpfd,wbuf,strlen(wbuf));}close(skt_tcpfd);
}