想在Linux下用socket套接字写个类似于windows下的QQ聊天程序,但是遇到不能循环发送和接受的问题,希望能向各位大侠请教,以下是代码:
这是server端代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
int main()
{
int oldfd,newfd;
struct sockaddr_in mysock;
int n;
char buf[1024];
oldfd=socket(AF_INET,SOCK_STREAM,0);
memset(&mysock,0,sizeof(mysock));
mysock.sin_family=AF_INET;
mysock.sin_port=htons(1025);
mysock.sin_addr.s_addr=htonl(INADDR_ANY);
bind(oldfd,(struct sockaddr*)&mysock,sizeof(mysock));
listen(oldfd,13);
while(1)
{
newfd=accept(oldfd,(struct sockaddr*)NULL,NULL);
//read();
n=read(newfd,buf,sizeof(buf));
buf[n]=0;
printf("%s\n",buf);
write(newfd,buf,n);//再写到client上去
close(newfd);
}
close(oldfd);
return 0;
}
以下是client端的代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
int main(int argc,char **argv)
{
int fd;
int n;
struct sockaddr_in mysock;
char buf[1024];
fd=socket(AF_INET,SOCK_STREAM,0);
memset(&mysock,0,sizeof(mysock));
mysock.sin_family=AF_INET;
mysock.sin_port=htons(1025);
inet_pton(AF_INET,argv[1],&mysock.sin_addr.s_addr);
while(1){//这是在一次连接成功后添加的循环
connect(fd,(struct sockaddr*)&mysock,sizeof(mysock));
n=read(STDIN_FILENO,buf,sizeof(buf));
write(fd,buf,n);
read(fd,buf,sizeof(buf));
buf[n]=0;
printf("this is fankui information:%s\n",buf);
}
close(fd);
return 0;
}