socket学习第一节:服务器和客户端通信
来源:互联网 发布:网上邻居网络密码 编辑:程序博客网 时间:2024/04/28 17:14
服务器端建立的步骤是:
1,建立socket ,用socket()函数。
2,由bind()函数绑定第一步建立的socket(由一个socket描述符代表)。
3,监听,由listen()函数实现。
4, 接收访问由accept()函数实现。
5,创建多线程接收发送的信息,由pthread_create()函数实现。
6,接收消息由recv()函数实现。
7,发送消息由send()函数实现。
下面是今天我写的服务器段代码,
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#include <pthread.h>#define MYPORT 3555#define BACKLOG 10#define MAXDATASIZE 1024int sockfd,new_fd;pthread_t accthread,recthread;void recmessage(void);void acceptconnet(void);void recmessage(void){ while (1) { int numbetys; char buf[MAXDATASIZE]; if((numbetys = recv(new_fd, buf, MAXDATASIZE, 0)) == -1){ perror("recv"); exit(1); } buf[numbetys] = '\0'; if(strcmp(buf, "exit") == 0){ printf("Client is closed \n"); close(new_fd); close(sockfd); exit(1); } printf("Client : %s\n",buf); }}void acceptconnet(void){ struct sockaddr_in client_addr; socklen_t sin_size; sin_size = sizeof(struct sockaddr_in); if((new_fd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size)) == -1){ perror("accept"); exit(1); } printf("Sever : got connection from %d \n",inet_ntoa(client_addr.sin_addr)); if((pthread_create(&recthread, NULL, (void *)recmessage, NULL)) != 0){ printf("Create thread error !\r\n"); exit(1); }}int main (int argc, const char * argv[]){ struct sockaddr_in sever_addr; sever_addr.sin_family = AF_INET; sever_addr.sin_port = htons(MYPORT); sever_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(sever_addr.sin_zero), 8); if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){ perror("socket"); exit(1); } if(bind(sockfd, (struct sockaddr *)&sever_addr, sizeof(struct sockaddr)) == -1){ perror("bind"); exit(1); } if(listen(sockfd, BACKLOG) == -1){ perror("Listen"); exit(1); } if(pthread_create(&accthread, NULL, (void *)acceptconnet, NULL) != 0){ printf("Create thread error !\r=n"); exit(1); } while (1) { char msg[MAXDATASIZE]; scanf("%s",msg); // printf("yourself : %s",msg); if(send(new_fd, msg, sizeof(msg), 0) == -1){ perror("send"); exit(1); } if(strcmp(msg, "exit") == 0){ printf("Bye Bye \n"); close(new_fd); close(sockfd); exit(1); } } return 0;}
- socket学习第一节:服务器和客户端通信
- SOCKET 服务器和客户端通信
- Socket通信之客户端和服务器对话
- C++ Socket多客户端和服务器通信
- socket服务器客户端通信乱码
- PHP Socket客户端服务器通信
- Socket客户端,服务器通信demo
- C#学习笔记-socket通信(同步,客户端+服务器,TCP)
- C# 多线程学习(三)Socket 服务器与客户端通信
- java 通过 socket 实现 服务器和客户端的通信 TCP
- 一个 Java 的 Socket 服务器和客户端通信的例子
- java socket 多客户端和服务器的通信
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 进程间数据共享
- 在Ubuntu上安装和配置OpenStack Nova(1)
- 如何高亮ASP.NET MENU 的父节点
- 老外雷人设计: 按键在手背上的鼠标
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- socket学习第一节:服务器和客户端通信
- 程序员最关心的是什么
- juqery实现左边树
- Orcle 主键自增(序列sequence、触发器trigger、主键primary)
- AndEngine----PathModifierExample学习之模仿《w》行走
- ffmpeg解码流程 .
- 使用WindowManager进行progress提示
- Android 中LayoutInflater的使用
- Spring Test 整合 JUnit 4 使用总结