【高编】本机服务器连接

222 阅读1分钟

服务端ser.c

#include<stdio.h>
#include <sys/socket.h>
#include<string.h>
#include <unistd.h>
#include<time.h>
#include<stdlib.h>

#include <sys/types.h>          /* See NOTES */
       #include <sys/socket.h>
 #include <netinet/in.h>
       #include  <netinet/ip.h>
#include<time.h>
 #include <sys/socket.h>
       #include <netinet/in.h>
       #include <arpa/inet.h>

typedef struct sockaddr* SA;
 
int main(int argc, const char *argv[])
{
	int listfd = socket(AF_INET,SOCK_STREAM,0);
	if(-1 == listfd)
	{
		perror("socket");
		exit(1);
	}

	struct sockaddr_in ser,cli;
	bzero(&ser,sizeof(ser));
	bzero(&ser,sizeof(cli));
	ser.sin_family= AF_INET;
	ser.sin_port = htons(50000);
	ser.sin_addr.s_addr = inet_addr("192.168.0.113");
	int ret = bind(listfd,(SA)&ser,sizeof(ser));
	if(-1 == ret)
	{
		perror("bind");
		exit(1);
	}
	
	listen(listfd,3);

	int len = sizeof(cli);
	int conn = accept(listfd,(SA)&cli,&len);
	if(-1 == conn)
	{
		perror("accept");
		exit(1);
	}

	printf("对方到ip是%s,对方到端口是%d\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));

	while(1)
	{
		char buf[1024] = {0};
		read(conn,buf,1024);
		time_t tm;
		time(&tm);
		sprintf(buf,"%s %s",buf,ctime(&tm));
		write(conn,buf,strlen(buf)+1);//不断向客户端发送时间
	}
	return 0;
}

客户端cli.c

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include  <netinet/ip.h>
#include<time.h>

typedef struct sockaddr* SA;
int main(int argc, const char *argv[])
{
	int conn = socket(AF_INET,SOCK_STREAM,0);
	if(-1 == conn)
	{
		perror("conn");
		exit(1);
	}

	struct sockaddr_in ser;
	bzero(&ser,sizeof(ser));
	ser.sin_family= AF_INET;
	ser.sin_port = htons(50000);
	ser.sin_addr.s_addr = inet_addr("192.168.0.113");//本机ip,和ser.c里面的ip要一样
	int ret = connect(conn,(SA)&ser,sizeof(ser));
	if(-1 == ret)
	{
		perror("connect");
		exit(1);
	}

	while(1)
	{
		char buf[1024]="hello,tcp test...";
		write(conn,buf,strlen(buf)+1);

		bzero(buf,1024);
		read(conn,buf,1024);
		printf("recv :[%s]",buf);
		sleep(1);

		printf("rec:[%s]\n",buf);

	}
	close(conn);

	return 0;
}

注意运行程序时候,虚拟机开两个终端,一个客户端,一个服务端,并且要先运行服务端,之后运行客户端.