Linux 控制台聊天程序
2014-03-11 08:48
309 查看
//客户端代码
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<sys/socket.h>
#include<resolv.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define MAXBUF 1024
int main(int argc, char** argv)
{
int sockfd,len;
struct sockaddr_in dest;
char buffer[MAXBUF+1];
if(argc!=3)
{
printf("(Fail)");
exit(0);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) //create socket
{
perror("(Socket)");
exit(errno);
}
printf("(socket created)\n");
bzero(&dest,sizeof(dest)); //clear dest
dest.sin_family=AF_INET;
dest.sin_port=htons(atoi(argv[2]));
if(inet_aton(argv[1],(struct in_addr*)&dest.sin_addr.s_addr)==0)
{
perror(argv[1]);
exit(errno);
}
printf("(address created)\n");
if(connect(sockfd,(struct sockaddr_in*)&dest,sizeof(dest))!=0)
{
perror("(Connect)");
exit(errno);
}
printf("(server connected)\n");
printf("(server sents first, both send in turn)\n");
while(1)
{
bzero(buffer,MAXBUF+1);
len=recv(sockfd,buffer,MAXBUF,0);
if(len>0)
printf("server:%s\n",buffer,len);
else
{
if(len<0)
printf("(Fail)\n");
else
printf("(Quit)\n");
break;
}
bzero(buffer,MAXBUF+1);
fgets(buffer,MAXBUF,stdin);
if(!strncasecmp(buffer,"quit",4))
{
printf("(Quit)\n");
break;
}
len=send(sockfd,buffer,strlen(buffer)-1,0);
if(len<0)
{
printf("(Fail)\n");
break;
}
}
close(sockfd);
return 0;
}
/***********************************************************************************************************************************************************************/
//服务器代码
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<unistd.h>
#include<arpa/inet.h>
#define MAXBUF 1024
int main(int argc, char** argv)
{
int sockfd, new_fd;
socklen_t len;
struct sockaddr_in my_addr, their_addr;
unsigned int myport, lisnum;
char buf[MAXBUF+1];
if(argv[1])
myport=atoi(argv[1]); //atoi converts string to int
else
myport=7838;
if(argv[2])
lisnum=atoi(argv[2]);
else
lisnum=2;
if((sockfd=socket(PF_INET,SOCK_STREAM,0))==-1) //create socket
{
perror("socket");
exit(1);
}
bzero(&my_addr,sizeof(struct sockaddr_in)); //clear my_addr to zero
my_addr.sin_family=PF_INET;
my_addr.sin_port=htons(myport); //converts the type order
if(argv[3])
my_addr.sin_addr.s_addr=inet_addr(argv[3]); //inet_addr converts IP address to int
else
my_addr.sin_addr.s_addr=INADDR_ANY;
if(bind(sockfd,(const struct sockaddr_in*)&my_addr,sizeof(struct sockaddr_in))==-1) //bind
{
perror("bind");
exit(1);
}
if (listen(sockfd,lisnum)==-1) //listen
{
perror("listen");
exit(1);
}
while(1)
{
printf("\n(----Server start....)\n");
printf("(server sents first, both send in turn)\n");
len=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr_in*)&their_addr,&len))==-1) //accept
{
perror("accept");
exit(errno);
}
else
printf("(server: got connection from %s, port %d, socket %d)\n",inet_ntoa(their_addr.sin_addr),ntohs(their_addr.sin_port),new_fd);
while(1)
{
bzero(buf,MAXBUF+1); //clear buffer
fgets(buf,MAXBUF,stdin);
if(!strncasecmp(buf,"quit",4)) //if received "quit", then quit
{
printf("\n(Quit!)\n");
break;
}
len=send(new_fd,buf,strlen(buf)-1,0); //send messages to the other socket
if(len<0)
{
printf("(Fail)\n");
break;
}
bzero(buf,MAXBUF+1); //clear buffer
len=recv(new_fd,buf,MAXBUF,0);
if(len>0)
printf("client:%s\n",buf);
else
{
if(len<0)
printf("(Fail)");
else
printf("(Quit)\n");
break;
}
}
close(new_fd);
}
close(sockfd);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<sys/socket.h>
#include<resolv.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define MAXBUF 1024
int main(int argc, char** argv)
{
int sockfd,len;
struct sockaddr_in dest;
char buffer[MAXBUF+1];
if(argc!=3)
{
printf("(Fail)");
exit(0);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0) //create socket
{
perror("(Socket)");
exit(errno);
}
printf("(socket created)\n");
bzero(&dest,sizeof(dest)); //clear dest
dest.sin_family=AF_INET;
dest.sin_port=htons(atoi(argv[2]));
if(inet_aton(argv[1],(struct in_addr*)&dest.sin_addr.s_addr)==0)
{
perror(argv[1]);
exit(errno);
}
printf("(address created)\n");
if(connect(sockfd,(struct sockaddr_in*)&dest,sizeof(dest))!=0)
{
perror("(Connect)");
exit(errno);
}
printf("(server connected)\n");
printf("(server sents first, both send in turn)\n");
while(1)
{
bzero(buffer,MAXBUF+1);
len=recv(sockfd,buffer,MAXBUF,0);
if(len>0)
printf("server:%s\n",buffer,len);
else
{
if(len<0)
printf("(Fail)\n");
else
printf("(Quit)\n");
break;
}
bzero(buffer,MAXBUF+1);
fgets(buffer,MAXBUF,stdin);
if(!strncasecmp(buffer,"quit",4))
{
printf("(Quit)\n");
break;
}
len=send(sockfd,buffer,strlen(buffer)-1,0);
if(len<0)
{
printf("(Fail)\n");
break;
}
}
close(sockfd);
return 0;
}
/***********************************************************************************************************************************************************************/
//服务器代码
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<unistd.h>
#include<arpa/inet.h>
#define MAXBUF 1024
int main(int argc, char** argv)
{
int sockfd, new_fd;
socklen_t len;
struct sockaddr_in my_addr, their_addr;
unsigned int myport, lisnum;
char buf[MAXBUF+1];
if(argv[1])
myport=atoi(argv[1]); //atoi converts string to int
else
myport=7838;
if(argv[2])
lisnum=atoi(argv[2]);
else
lisnum=2;
if((sockfd=socket(PF_INET,SOCK_STREAM,0))==-1) //create socket
{
perror("socket");
exit(1);
}
bzero(&my_addr,sizeof(struct sockaddr_in)); //clear my_addr to zero
my_addr.sin_family=PF_INET;
my_addr.sin_port=htons(myport); //converts the type order
if(argv[3])
my_addr.sin_addr.s_addr=inet_addr(argv[3]); //inet_addr converts IP address to int
else
my_addr.sin_addr.s_addr=INADDR_ANY;
if(bind(sockfd,(const struct sockaddr_in*)&my_addr,sizeof(struct sockaddr_in))==-1) //bind
{
perror("bind");
exit(1);
}
if (listen(sockfd,lisnum)==-1) //listen
{
perror("listen");
exit(1);
}
while(1)
{
printf("\n(----Server start....)\n");
printf("(server sents first, both send in turn)\n");
len=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr_in*)&their_addr,&len))==-1) //accept
{
perror("accept");
exit(errno);
}
else
printf("(server: got connection from %s, port %d, socket %d)\n",inet_ntoa(their_addr.sin_addr),ntohs(their_addr.sin_port),new_fd);
while(1)
{
bzero(buf,MAXBUF+1); //clear buffer
fgets(buf,MAXBUF,stdin);
if(!strncasecmp(buf,"quit",4)) //if received "quit", then quit
{
printf("\n(Quit!)\n");
break;
}
len=send(new_fd,buf,strlen(buf)-1,0); //send messages to the other socket
if(len<0)
{
printf("(Fail)\n");
break;
}
bzero(buf,MAXBUF+1); //clear buffer
len=recv(new_fd,buf,MAXBUF,0);
if(len>0)
printf("client:%s\n",buf);
else
{
if(len<0)
printf("(Fail)");
else
printf("(Quit)\n");
break;
}
}
close(new_fd);
}
close(sockfd);
return 0;
}
相关文章推荐
- 基于linux下控制台,多线程并发控制的聊天程序(服务器端)
- 基于linux下控制台,多线程并发控制的聊天程序(服务器端)
- VC++ 基于UDP的控制台聊天程序socket通信
- linux C/S 有用户名的聊天程序 only one cilent —— using socket
- jchat:linux聊天程序4:客户端
- Linux下C语言多线程,网络通信简单聊天程序
- 简单的控制台聊天程序(C Socket编程)
- linux select 异步聊天程序,比较好
- Linux网络编程一步一步学-异步通讯聊天程序select
- 控制台线程聊天程序
- linux c/c++ 聊天小程序代码示例 (使用socket 和 IO 多路复用技术)
- [Java] Socket/ServerSocket/Thread 控制台聊天程序--两人任意聊
- linux下TCP/IP实现简单聊天程序
- jchat:linux聊天程序3:服务器
- jchat:linux聊天程序4:客户端
- Linux下socket异步通讯聊天程序
- linux-socket聊天程序-服务器(支持私聊)
- socket聊天程序(多线程,控制台)
- 一个UDP的聊天控制台程序
- 轻易实现基于linux或win运行的聊天服务端程序