C语言实现的Socket编程
来源:互联网 发布:淘宝上哪家皮草店好 编辑:程序博客网 时间:2024/06/05 03:14
接收端程序:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#define myport 319char buf[200];int main(int argc , char *argv[]){ int sockfd,new_sockfd; struct sockaddr_in sin_addr,pin_addr; int len, pin_addr_size,i; if ((sockfd = socket(AF_INET, SOCK_STREAM,0)) <0) { printf("can’t create socket\n"); exit(1); } memset( &sin_addr, 0, sizeof(sin_addr)); sin_addr.sin_family = AF_INET; sin_addr.sin_addr.s_addr = htonl(INADDR_ANY); sin_addr.sin_port = htons(myport); if (bind(sockfd, (struct sockaddr *)&sin_addr, sizeof(sin_addr))<0) { printf("can’t bind socket\n"); exit(1); } if (listen(sockfd, 5) < 0 ) { printf("listen error\n"); exit(1); } while (1) { if ((new_sockfd = accept (sockfd, (struct sockaddr *)&pin_addr,&pin_addr_size)) < 0) { printf("accept eroor\n"); exit(1); } if(recv(new_sockfd, buf, 200, 0) == -1) { printf("can’t receive packet\n"); exit(1); } printf("received from client:%s\n", buf); close(new_sockfd); } return 0;}
发送端程序:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#define myport 319char buf[200]="Hello World!";int main(int argc , char *argv[]){ int sockfd,new_sockfd; struct sockaddr_in sin_addr,pin_addr; int len, pin_addr_size,i; if ((sockfd = socket(AF_INET, SOCK_STREAM,0)) <0) { printf("can’t create socket\n"); exit(1); } memset( &sin_addr, 0, sizeof(sin_addr)); sin_addr.sin_family = AF_INET; sin_addr.sin_addr.s_addr = htonl(INADDR_ANY); sin_addr.sin_port = htons(myport); if((new_sockfd=connect(sockfd,(struct sockaddr *)&sin_addr, sizeof(sin_addr)))!=0) { printf("connect error!\n"); exit(1); } while(1) { if(send(sockfd, buf, strlen(buf), 0)<=0) { printf("发送失败!\n"); exit(1); } } close(new_sockfd);}
此时“Hello World”只能发送一次到接收端,然后发送端终止。
如果想让服务端一直接收“Hello World”,需要把accept放在While循环外面,close放在While循环外面。此时会刷屏。
但是这样仍然有问题,此时接收端只能接收第一个建立TCP连接的发送端,即成为了点对点程序。如果想要和接收端建立多个TCP连接,就出现了问题。
所以最好的方法是在接收端建立多线程:
接收端:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <pthread.h>#define myport 6666void *thread_function(void *arg){char buf[200]; int new_sockfd = (int)arg; while(1){bzero(buf,200); if(recv(new_sockfd, buf, 200, 0) == -1) { printf("can’t receive packet\n"); break;//以前是Exit } printf("received from client:%s\n", buf); } close(new_sockfd);}int main(int argc , char *argv[]){int sockfd;struct sockaddr_in sin_addr; if ((sockfd = socket(AF_INET, SOCK_STREAM,0)) <0) { printf("can’t create socket\n"); exit(1); } memset( &sin_addr, 0, sizeof(sin_addr)); sin_addr.sin_family = AF_INET; sin_addr.sin_addr.s_addr = htonl(INADDR_ANY); sin_addr.sin_port = htons(myport); if (bind(sockfd, (struct sockaddr *)&sin_addr, sizeof(sin_addr))<0) { printf("can’t bind socket\n"); exit(1); } if (listen(sockfd, 5) < 0 ) { printf("listen error\n"); exit(1); }while(1){struct sockaddr_in pin_addr;int pin_addr_size;int new_sockfd; if ((new_sockfd = accept (sockfd, (struct sockaddr *)&pin_addr,&pin_addr_size)) < 0) { printf("accept eroor\n"); exit(1); }pthread_t a_thread;//开辟线程 pthread_create(&a_thread,NULL,thread_function,(void *)new_sockfd);//创建进程} return 0;}
发送端:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#define myport 6666char buf[200];int main(int argc , char *argv[]){ int sockfd,new_sockfd; struct sockaddr_in sin_addr,pin_addr; int len, pin_addr_size,i; if ((sockfd = socket(AF_INET, SOCK_STREAM,0)) <0) { printf("can’t create socket\n"); exit(1); } memset( &sin_addr, 0, sizeof(sin_addr)); sin_addr.sin_family = AF_INET; sin_addr.sin_addr.s_addr = htonl(INADDR_ANY); sin_addr.sin_port = htons(myport); if((new_sockfd=connect(sockfd,(struct sockaddr *)&sin_addr, sizeof(sin_addr)))!=0) { printf("connect error!\n"); exit(1); } while(1) {scanf("%s",buf); if(send(sockfd, buf, strlen(buf), 0)<=0) { printf("发送失败!\n"); exit(1); }bzero(buf,200); } close(new_sockfd);}
- C语言实现的Socket编程
- C语言socket编程----实现TCP通信
- SOCKET编程(C语言实现)
- Socket编程(C语言实现):socket()函数英文翻译
- c语言Socket编程
- c语言 socket编程
- c语言socket编程
- Socket编程--c语言
- C语言SOCKET编程
- c语言的socket编程----服务器端
- Linux C语言实现的Socket通信
- C 语言 实现的socket 通信
- C 语言 实现的socket 通信
- c语言实现TCP的socket通信
- C语言实现简单的socket实例
- 用C语言实现的Socket通信
- C实现socket编程
- Linux下C语言实现UDP Socket编程
- poj 1860 Currency Exchange (Bellman_Ford)
- Playing with ptrace, Part II
- Andriod 使用MediaPlayer播放音频文件
- linux蓝牙驱动代码阅读笔记
- QT QXmlStreamReader用法小结
- C语言实现的Socket编程
- camera2
- MongoDB设置访问权限、设置用户
- oracle表空间
- Spring jdbc 批量更新
- camera3
- POJ 2923 Relocation (状态压缩 0-1背包)
- android 各种控件颜色值的设置(使用Drawable,Color)
- camera4