Linux 网络编程实现TCP协议下的服务器客户端通信

基于TCP协议的客户端代码

/*
 ************************************************
 *Name : Linux Client                     <span style="white-space:pre">	</span>*
 *Date : 2014-11-10                       <span style="white-space:pre">	</span>*
 *Author : marksman<span style="white-space:pre">	</span>                        *
 *Aim : Linux Client can send and receive <span style="white-space:pre">	</span>*
 *<span style="white-space:pre">	</span>message.<span style="white-space:pre">	</span>			*
 ************************************************
 */
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>

int main(int argc,char *argv[])
{

	int socketfd,receive_socket;
	struct sockaddr_in s_add,c_add;
	unsigned short portnum = 0x22B8;
	int len;
	char buf[100];
	
	/*
	 *Create the socket
	 */
	if((socketfd=socket(AF_INET,SOCK_STREAM,0))<0)
	{
		printf("Socket create error! \n");
		exit(1);
	}
	
	/*
	 *set the address format
	 */	
	bzero(&s_add,sizeof(struct sockaddr_in));
	s_add.sin_family = AF_INET;
	s_add.sin_addr.s_addr = inet_addr("127.0.0.1");//change the string to 32-bit internet byte.
	s_add.sin_port=htons(portnum);
	
	if (connect(socketfd,(struct sockaddr *)(&s_add),sizeof(struct sockaddr))<0)
	{
		printf("Connect failure!\n");
		return -1;
	}
	else
		printf("Connect Success!\n");
		
	/*
	 *Using the loop to send and receive the message.
	 */			
	while(1)
	{
		memset(buf,'\0',100);
		printf("Input message to send: ");
		fgets(buf,100,stdin);
		len=send(socketfd,buf,strlen(buf)-1,0);
		if(len<0)
		{
			printf("send error!\n");
			exit(1);
		}
		else 
		{
			printf("Send Success! send is : %s \n",buf);
		}
		
		memset(buf,'\0',100);
		len=recv(socketfd,buf,100,0);		
		if(len<0)
		{
			printf("recv error!\n");
			exit(1);
		}
		else if(0 == len)
		{
			printf("client quit!\n");
			exit(1);
		}
		else
		{
			printf("receive message is : %s\n",buf);
		}
		
		printf("--------------------------\n");
		
	}
	close(socketfd);
	
}

基于TCP协议的服务器代码

/*
 ************************************************
 *Name : Linux Server                     <span style="white-space:pre">	</span>*
 *Date : 2014-11-10                       <span style="white-space:pre">	</span>*
 *Author : marksman                       <span style="white-space:pre">	</span>*
 *Aim : Linux Server can send and receive <span style="white-space:pre">	</span>*
 *<span style="white-space:pre">	</span>message.It is atom system about   <span style="white-space:pre">	</span>*
 *	Instant Messaging system.         <span style="white-space:pre">	</span>*
 ************************************************
 */
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <sys/socket.h>

int main(int argc,char *argv[])
{
	int socketfd_listen,socketfd_connect;
	struct sockaddr_in server_addr,client_addr;
	unsigned short portnum = 0x22B8;
	int len ;
	char buf[100];
	
	
	/*
	 *Create the socket
	 */
	if((socketfd_listen=socket(AF_INET,SOCK_STREAM,0))<0)
	{
		printf("Socket create error! \n");
		exit(1);
	}
	
	/*
	 *set the address format
	 */	
	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(portnum);
	
	if(bind(socketfd_listen,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))<0)
	{
		printf("bind failure!\n");
		return -1;
	}
	printf("bind Success!\n");
	
	if(listen(socketfd_listen,5)<0)
	{
		printf("Listen failure!\n");
		return -1;
	}
	
	len=sizeof(struct sockaddr);
	socketfd_connect = accept(socketfd_listen, (struct sockaddr *)(&client_addr), &len);
	
	if(socketfd_connect<0)
	{	
		printf("accept fail !\n");
		return -1;
	}
	
	/*
	 *Using the loop to send and receive the message.
	 */	
	while(1)
	{
		
		memset(buf,0,100);
		len=recv(socketfd_connect,buf,100,0);
		if(len<0)
		{
			printf("recv error!\n");
			exit(1);
		}
		else if(0 == len)
		{
			printf("the client quit!\n");
			break;
		}
		else
		{
			printf("receive message is : %s \n",buf);
		}
		
		//memset(buf,0,100);
		//printf("Input message to send : ");
		//fgets(buf,100,stdin);
		
		len=send(socketfd_connect,buf,strlen(buf)-1,0);
		
		if(len<0)
		{
			printf("Send error!\n");
			exit(1);
		}
		else 
		{
			printf("Send succeed send : %s \n",buf);
		}
		
		printf("------------------------\n");
	}
	
	close(socketfd_listen);
	close(socketfd_connect);	
	return 0;
}

函数详细说明参考《UNIX环境高级编程第二版》

望网友批评指正

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值