// 服务器端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main(int argc,char *argv[])
{ int sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(atoi(argv[1]));
serveraddr.sin_addr.s_addr=INADDR_ANY;
if(bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))<0){
perror("bind error");
exit(1);
}
printf("bind\n");
if(listen(sockfd,10)<0){
perror("listen error");
exit(1);
}
struct sockaddr_in clientaddr;
char buffer[512];
socklen_t clientaddr_len = sizeof(clientaddr);
printf("listen");
while(1){
int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&clientaddr_len);
printf("accept connect");
if(fd<0){
perror("accept error");
continue;
}
printf("accept connect");
pid_t pid=fork();
if(pid <0){
continue;
}else if(pid == 0){
// child process
while(1){
memset(buffer,0,sizeof(buffer));
read(sockfd,buffer,sizeof(buffer));
fputs(buffer,stdout);
}
}else {
printf("parent process");
} }
// close(fd);
close(sockfd);
return 0;
}// 客户端#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main(int argc,char *argv[])
{ int sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(atoi(argv[1]));
char ip[16];
memset(ip,0,sizeof(ip));
strcpy(ip,"127.0.0.1");
inet_pton(AF_INET,ip,&serveraddr.sin_addr.s_addr,sizeof(serveraddr));
char buffer[512];
if(connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))<0){
perror("connect error");
exit(1);
}
printf("connect ok \n");
// close(fd);
while(1){
int ret;
if(( ret= write(sockfd,buffer,sizeof(buffer)))<0){
perror("write error");
continue;
}
read(sockfd,buffer,ret);
fputs(buffer,stdout);
memset(buffer,0,sizeof(buffer));
}
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main(int argc,char *argv[])
{ int sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(atoi(argv[1]));
serveraddr.sin_addr.s_addr=INADDR_ANY;
if(bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))<0){
perror("bind error");
exit(1);
}
printf("bind\n");
if(listen(sockfd,10)<0){
perror("listen error");
exit(1);
}
struct sockaddr_in clientaddr;
char buffer[512];
socklen_t clientaddr_len = sizeof(clientaddr);
printf("listen");
while(1){
int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&clientaddr_len);
printf("accept connect");
if(fd<0){
perror("accept error");
continue;
}
printf("accept connect");
pid_t pid=fork();
if(pid <0){
continue;
}else if(pid == 0){
// child process
while(1){
memset(buffer,0,sizeof(buffer));
read(sockfd,buffer,sizeof(buffer));
fputs(buffer,stdout);
}
}else {
printf("parent process");
} }
// close(fd);
close(sockfd);
return 0;
}// 客户端#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main(int argc,char *argv[])
{ int sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(atoi(argv[1]));
char ip[16];
memset(ip,0,sizeof(ip));
strcpy(ip,"127.0.0.1");
inet_pton(AF_INET,ip,&serveraddr.sin_addr.s_addr,sizeof(serveraddr));
char buffer[512];
if(connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))<0){
perror("connect error");
exit(1);
}
printf("connect ok \n");
// close(fd);
while(1){
int ret;
if(( ret= write(sockfd,buffer,sizeof(buffer)))<0){
perror("write error");
continue;
}
read(sockfd,buffer,ret);
fputs(buffer,stdout);
memset(buffer,0,sizeof(buffer));
}
return 0;
}
解决方案 »
- gitlab升级出错
- 两台电脑,一台装有Win 8,一台是Ubuntu,在Win8上装有一个VMware Workstations ,如果实现Ubuntu系统和这个虚拟机通讯?
- redhat 5.6 升级python 2.4.3到2.7.15
- rsyslog识别变化文件名,如按日期命名的
- swap的used空间怎么会高得这么吓人?
- OpenSSH之类的软件版本号中带有P1是啥意思?
- shell 怎么取当前时间过去5分钟这个怎么写?
- putty无法使用ssh远程本地ubu服务器Connectio reset by 127.0.0.1 port 22。server unexpectedly
- 21.5寸usb接口的触摸屏 + qt4.8或者qt5.3 ,为什么点击qt的坐标有偏离?
- ubuntu非正常关机后无法进入图形桌面,求助
- root无法修改密码
- ubuntu15.04中英文问题
还有一个点 在客户端已经连接上后 服务器端的在accept函数堵塞时 bind函数与listen下面的两条print语句并没有输出,只有在我传输数据时才会被打印一次 ,就很奇怪