Simple TCP Server Client Socket C
2014-04-01 14:19
537 查看
转载链接:http://blog.163.com/caipeipei_love@126/blog/static/2596603220101118433940/
tcpserver.c
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>
#define portnumber 8080
int main(int argc ,char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,iDataNum;
// const char hello[]="Hello cpp, you are success.\n";
char buffer[4096];
if(argc!=2)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
return 0;
}
// if((portnumber=atoi(argv[1]))<0)
// {
// fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
// return 0;
// }
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
return 0;
}
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber);
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
return 0;
}
if(listen(sockfd,5)==-1)
{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
return 0;
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
{
fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
return 0;
}
fprintf(stdout,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
iDataNum=recv(new_fd,buffer,4096,0);
if(iDataNum<0)
{
perror("Recv\n");
exit(1);
}
printf("Recv data is %s\n",buffer);
send(new_fd,buffer,sizeof(buffer),0);
// if(write(new_fd,hello,strlen(hello))==-1)
// {
// fprintf(stderr,"write error:%s\n",strerror(errno));
// return 0;
// }
close(new_fd);
}
close(sockfd);
// exit(0);
return 0;
}
tcpclient.c
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<errno.h>
int main(int argc,char *argv[])
{
int sockfd;
char sendbuffer[200];
char recvbuffer[200];
// char buffer[1024];
struct sockaddr_in server_addr;
struct hostent *host;
int portnumber,nbytes;
if(argc!=3)
{
fprintf(stderr,"Usage :%s hostname portnumber\a\n",argv[0]);
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
herror("Get host name error\n");
exit(1);
}
if((portnumber=atoi(argv[2]))<0)
{
fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
server_addr.sin_addr=*((struct in_addr *)host->h_addr);
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Connect error:%s\n",strerror(errno));
exit(1);
}
while(1)
{
printf("Please input your word:\n");
scanf("%s",sendbuffer);
printf("\n");
if(strcmp(sendbuffer,"quit")==0)
break;
send(sockfd,sendbuffer,sizeof(sendbuffer),0);
recv(sockfd,recvbuffer,200,0);
printf("recv data of my world is :%s\n",recvbuffer);
}
// if((nbytes=read(sockfd,buffer,1024))==-1)
//{
// fprintf(stderr,"read error:%s\n",strerror(errno));
// exit(1);
// }
// buffer[nbytes]='\0';
// printf("I have received %s\n",buffer);
close(sockfd);
exit(0);
}
首先要编译tcpserver.c,命令:
gcc -g tcpserver.c -o tcpserver
./tcpserver 8080
然后再编译tcpclient.c,具体命令:
gcc -g tcpclient.c -o tcpclient
./tcpclient localhost 8080
tcpserver.c
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>
#define portnumber 8080
int main(int argc ,char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,iDataNum;
// const char hello[]="Hello cpp, you are success.\n";
char buffer[4096];
if(argc!=2)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
return 0;
}
// if((portnumber=atoi(argv[1]))<0)
// {
// fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
// return 0;
// }
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
return 0;
}
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber);
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
return 0;
}
if(listen(sockfd,5)==-1)
{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
return 0;
}
while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
{
fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
return 0;
}
fprintf(stdout,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
iDataNum=recv(new_fd,buffer,4096,0);
if(iDataNum<0)
{
perror("Recv\n");
exit(1);
}
printf("Recv data is %s\n",buffer);
send(new_fd,buffer,sizeof(buffer),0);
// if(write(new_fd,hello,strlen(hello))==-1)
// {
// fprintf(stderr,"write error:%s\n",strerror(errno));
// return 0;
// }
close(new_fd);
}
close(sockfd);
// exit(0);
return 0;
}
tcpclient.c
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<errno.h>
int main(int argc,char *argv[])
{
int sockfd;
char sendbuffer[200];
char recvbuffer[200];
// char buffer[1024];
struct sockaddr_in server_addr;
struct hostent *host;
int portnumber,nbytes;
if(argc!=3)
{
fprintf(stderr,"Usage :%s hostname portnumber\a\n",argv[0]);
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
herror("Get host name error\n");
exit(1);
}
if((portnumber=atoi(argv[2]))<0)
{
fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket Error:%s\a\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
server_addr.sin_addr=*((struct in_addr *)host->h_addr);
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Connect error:%s\n",strerror(errno));
exit(1);
}
while(1)
{
printf("Please input your word:\n");
scanf("%s",sendbuffer);
printf("\n");
if(strcmp(sendbuffer,"quit")==0)
break;
send(sockfd,sendbuffer,sizeof(sendbuffer),0);
recv(sockfd,recvbuffer,200,0);
printf("recv data of my world is :%s\n",recvbuffer);
}
// if((nbytes=read(sockfd,buffer,1024))==-1)
//{
// fprintf(stderr,"read error:%s\n",strerror(errno));
// exit(1);
// }
// buffer[nbytes]='\0';
// printf("I have received %s\n",buffer);
close(sockfd);
exit(0);
}
首先要编译tcpserver.c,命令:
gcc -g tcpserver.c -o tcpserver
./tcpserver 8080
然后再编译tcpclient.c,具体命令:
gcc -g tcpclient.c -o tcpclient
./tcpclient localhost 8080
相关文章推荐
- Simple TCP Socket Client and Server Communication in C Under Linux
- 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
- 关于linux下的TCP 的socket server和client,我的理解
- Simple and fast async binary TCP socket server
- 3个学习Socket编程的简单例子:TCP Server/Client, Select
- 【windows socket+TCPserverclient】
- 编写Linux下socket协议TCP的ClientServer程序
- Simple TCP/IP Echo Server & Client Application in C#
- [Socket]基于C++的纯面向对象的通用高性能大并发TCP-SERVER/CLIENT开发框架
- C socket TCP/UDP client/server example codes
- Simple TcpClient and TcpServer in Java
- Python Socket实现简单TCP Server/client功能示例
- 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
- 3个学习Socket编程的简单例子:TCP Server/Client, Select
- C# Socket TCP Server & Client & nodejs client
- 基于Linux的Socket编程之TCP全双工Server-Client聊天程序
- 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
- 网络套接字socket(tcp、server、client)
- 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
- 基于Linux的Socket编程之TCP全双工Server-Client聊天程序