#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
//sock_addr_in 在 #include<netinet/in.h>中定义
struct sockaddr_in
{
short int sin_family;//协议族,在socket编程中只能是AF_INET
unsigned short int sin_port;//存储端口号
struct in_addr sin_addr;//存储IP地址
unsigned char sin_zero[8];//为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节
};
struct in_addr
{
unsigned long s_addr;//按照网络字节顺序存储IP地址
};
struct hostent
{
char *h_name;//正式主机别名
char **h_aliases;//主机别名
int h_addrtype;//主机IP地址类型:IPV4-AF_INET
int h_length;//主机IP地址字节长度,对于IPv4是四字节,即32位
char **h_addr_list;//主机的IP地址列表
};
#define h_addr h_addr_list[0] //保存的是IP地址
void error(const char *msg)
{
perror(msg);
exit(0);
}
int main(int argc,char *argv[])
{
int sockfd,portno,n;
struct sockaddr_in serv_adddr;
struct c *server;
char buffer[256];
struct sockaddr_in serv_addr,cli_addr;
int n;
if(argc < 2)
{
fprintf(stderr,"ERROR, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET,SOCK_STREAM,0);//创建一个套接口
/*int socket(int domain, int type, int protocol);协议族 socket类型 指定协议*/
if(sockfd < 0) error("ERROR opening socket");
server = gethostbyname(argv[1]);
if(server == NULL)
{
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr,sizeof(serv_addr));//初始化
serv_addr.sin_family = AF_INET;//协议族, AF_INET表示TCP/IP协议
bcopy((char *)server -> h_addr,(char *)&serv_addr.sin_addr,server -> h_length);//把存储IP地址复制到主机的IP地址列表
serv_addr.sin_port = htons(portno);//htons()将主机的无符号短整型书转换成网络字节流
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
/*int connect(int s, const struct sockaddr * name, int namelen);用于建立与指定socket的连接*/
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if(n < 0)error("ERROR writing to socket");
bzero(buffer,256);
n = read(socket,buffer,255);
if(n < 0) error("ERROR reading from socket");
printf("%s\n",buffer);
close(sockrd);
return 0;
}
socket 套接字
最新推荐文章于 2023-07-28 11:08:06 发布