69,373
社区成员
发帖
与我相关
我的任务
分享
简单的socket编程例子
/*echocli.c --echo client*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/sockets.h>
#include <net/netinet.h>
#define BUFLEN 255
int main(int argc,char** argv)
{
struct sockaddr_in
{
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
struct socketaddr_in servaddr; /*服务方socket地址结构 */
int sockfd,h;
char recmsg[BUFLEN+1];
char errmsg[]="echo doesn't function.\n";
if (argc!=2) {
printf("%s<IP address>\n",arfv[0]);
exit(0);
}
sockfd=socket(AF_INET,SOCK_STREAM,0); /*生成一个socket */
if(sockfd<0) {
fprintf(stderr,"socket creating error!\n");
exit(1);
}
memset(&servaddr,0,sizeof(struct sockaddr_in));
servaddr.sin_family=AF_INET; /*使用ipv4协议族的socket*/
servaddr.sin_port= htons(7); /*Echo服务的周知口*/
if(inet_pton(AF_INET,arfv[1],&servaddr.sin_addr) <=0)
{
/*通过inet_pton获得ip地址*/
printf("Wrong IP address!\n");
exit(0);
}
if(connet(sockfd,(struct sockaddr*) (&servaddr),sizeof(struct sockaddr_in) )<0)
{
/*connet将socket这个套接字与指定的ip的地址和断口号连接*/
printf("Connection Failure!\n");
exit(2);
}
printf("Connected to host %s\n",argv[1]);
while (fgets(recmsg,BUFLEN ,stdin) !=NULL)
{ /*从终端读入一行*/
write (sockfd,recmsg,strlen(recmsg) );/* 向sockfd写入*/
printf("sent:%s",recmsg);
strcpy(recmsg,errmsg);
n=read(sockfd,recmsg,BUFLEN); /*从socket读出*/
if(n>0)
{
recmsg[n]=0;
printf("echo:%s",recmsg);
}
else if(n==-1)
{
frpintf(stderr,"read error in client socket!\n");
exit(3);
}
}
exit(0);
}