服务端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;
}
注意运行程序时候,虚拟机开两个终端,一个客户端,一个服务端,并且要先运行服务端,之后运行客户端.