#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h>
void *rec_data(void *fd);
void error(const char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
int sockfd, portno;
int * newsockfd;
socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr;
if (argc < 2) {
fprintf(stderr,"ERROR, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
printf("wait for client connect\n");
while(1) {
pthread_t thread;
newsockfd = (int *)malloc(sizeof(int));
* newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
error("ERROR on accept");
if(pthread_create(&thread, NULL, rec_data, newsockfd)!=0) {
perror("ERROR on create thread");
break;
}
}
close(sockfd);
return 0;
}
void *rec_data(void *fd)
{
int n, newsockfd;
char buffer[256];
newsockfd=*((int*)fd);
while(1) {
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0) error("ERROR reading from socket");
if(strcmp(buffer,"quit\r\n") == 0) {
break;
}
printf("Here is the message: %s\n",buffer);
n = write(newsockfd,"I got your message\n",18);
if (n < 0) error("ERROR writing to socket");
}
free(fd);
close(newsockfd);
pthread_exit(NULL);
}
makefile:
all: server
server:server.o
gcc -g -o server server.o -lpthread
server.o:server.c
gcc -g -c server.c
clean:
rm -rf *.o server
分享到:
相关推荐
Linux下基于socket多线程并发通信的实现,论文,pdf文档
几个月总结和收集资料第一套:C++_Socket网络编程大全linux SOCKET编程源码linux_Socket_函数集多线程编程Linux网络编程多线程编程程存储和共享内存等10多个资料...
linux下c写的几个socket代码,包括各个方面的介绍,超时机制,新号处理机制都有。
Linux下基于socket多线程并发通信的实现.pdf
第二套:c语言Socket编程C语言SOCKET编程指南.c语言多进程多线程程.pdf,Linux Socket rogramming by Example.pdf,Linux 多线程等10多个资料....
基于tcp协议的linux下的socket编程。
最近几个月总结和网上收集资料第三套:c语言Socket编程多线程编程入门指导Socket编程Thread_多线程Linux下的多线程编程等10多个资料....
linux_socket_多线程服务器端代码,包含两套实现,如有问题,欢迎留言指正2006sszgg@163.com。
linux c tcp socket 多线程 简单聊天室 ,服务器端负责转发,代码很简陋有待改进
Linux下用Socket和多线程实现简单聊天室
本程序为基于linux的socket多线程通信,实现了服务器与客户端的交互信息,并在服务器端显示客户的Ip,port,以利于服务器辨认是哪一个客户端发来的信息,程序调试正确,具有很大的借鉴与参考价值
linux下多线程读写socket的简单例子,很容易学习,对于初学者有很大帮助
Linux下多线程的阻塞模式下的socket编程,简单实用,可以重用。
在linux下用socket的多线程通讯实现一个服务器和多个客户端之间的相互通讯。如果要实现多个和多个客户端通讯,则只需将里面的thread_client编译成多个文件即可。代码绝对是能用的~有什么疑问请留言~希望对大家伙有...
Linux基于多线程方式的socket编程,语言是c++版的,建议在Linux下使用GCC编程调试。
《Linux + socket多线程并发服务端+ 聊天室》 介绍是服务端和多个客户端之间可以交换信息的简单的聊天程序。 使用多线程并发技术,Socket网络通信
基于linux的socket多人聊天室程序,采用posix多线程控制技术。客户端和服务器采用协议机制通信,服务器端在用户上线和下线时及时更新在线人数,并打印上下线信息(用户名)。客户端登陆需要输入用户名,若用户名已...
多线程linux _socket_tcp协议_无阻塞
Linux下基于socket多线程并发通信的实现.docx
本程序以ubuntu为client运行环境,以装有linux系统的arm板为server端,server端以多线程的形式服务client的请求。