`

linux socket 多线程

阅读更多
#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 多线程代码

    综上所述,这个"linux socket 多线程代码"项目涵盖了从基本的Socket编程到多线程通信的各个方面,通过学习和实践这些代码,开发者可以深入了解如何在Linux环境中高效地利用Socket和多线程技术进行网络通信。

    Linux下基于socket多线程并发通信的实现.pdf

    "Linux下基于socket多线程并发通信的实现" 本文主要探讨Linux操作系统下基于socket多线程并发通信的实现。 socket是UNIX系统开发中的网络通信接口,可以对台计算机之间的通信规范进行合理定义,从而达到通信的目的...

    linux c++ socket 多线程1

    本文将深入探讨Linux环境下的C++ Socket网络编程和多线程技术,基于提供的资料列表进行详细解析。 首先,"C++_Socket网络编程大全"是关于使用C++进行Socket编程的全面教程。Socket是网络通信的基础,它为应用程序...

    Linux下基于socket多线程并发通信的实现

    总结来说,Linux下的多线程并发通信基于socket实现,结合TCP/IP协议,能够高效地处理多个客户端的并发请求。开发者需要理解套接字的概念、类型以及编程原理,同时掌握多线程编程技巧,包括线程安全、线程池等,以...

    linux下基于socket的多线程编程

    在Linux操作系统中,基于Socket的多线程编程是网络编程中的一个重要领域,它结合了Socket通信和多线程技术,可以实现高效的并发服务。Socket是网络通信的基本接口,TCP(Transmission Control Protocol)协议则提供...

    socket linux c++ 多线程3

    本文将重点讨论"socket"、"linux"和"c++"环境下的多线程编程。这些技术结合在一起,可以构建高性能、高并发的网络服务。 首先,Socket编程是网络通信的基础,它允许应用程序通过网络发送和接收数据。在C++中,可以...

    linux c++ socket 多线程2

    第二套:c语言Socket编程C语言SOCKET编程指南.c语言多进程多线程程.pdf,Linux Socket rogramming by Example.pdf,Linux 多线程等10多个资料....

    c#超级Socket库SuperSocket,SOCKET多线程编程

    在.NET平台上,SuperSocket以其易于扩展和高度定制化的特性,成为了Socket多线程编程的一个优选方案。 **一、SuperSocket的核心特性** 1. **多线程支持**:SuperSocket采用了多线程模型来处理客户端的连接,确保了...

    linux_socket_多线程服务器端代码

    linux_socket_多线程服务器端代码,包含两套实现,如有问题,欢迎留言指正2006sszgg@163.com。

    基于linux的socket多线程通信

    基于 Linux 的 Socket 多线程通信 本文将详细介绍基于 Linux 的 Socket 多线程通信的知识点,包括进程间通信、Socket 的概念和基本操作等。 进程间通信 在网络中,进程之间如何通信是一个重要的问题。在本地,...

    Linux下用Socket和多线程实现简单聊天室

    在Linux操作系统中,使用Socket和多线程技术可以构建一个简单的聊天室应用。Socket是网络通信的基本接口,它允许不同的进程或计算机之间进行数据交换。而多线程则可以提高程序的并发处理能力,使聊天室能同时处理多...

    linux c tcp socket 多线程简易聊天室

    总结来说,这个项目是一个基础的TCP Socket多线程聊天室,涉及到网络编程、多线程编程以及简单的客户端-服务器通信模型。对于初学者,这是一个很好的学习实践平台,能够帮助理解TCP通信和多线程应用。而对于有经验的...

    linux下多线程读写socket的简单例子

    本示例主要探讨如何在Linux环境下利用多线程同时进行socket的读写操作,这对于提升程序的并发性能和效率至关重要。对于初学者来说,理解这一概念有助于深入学习网络编程和系统级编程。 首先,我们要了解什么是...

    Linux基于多线程方式的socket编程

    在Linux系统中,多线程Socket编程是一种常见且强大的网络通信技术。Socket接口提供了一种在不同进程间进行网络通信的机制,而多线程则允许程序并行执行多个任务,提高了程序的效率和响应性。本文将深入探讨如何在C++...

    Linux下多线程的阻塞模式下的socket编程

    在Linux操作系统中,多线程编程与阻塞模式下的socket通信是网络编程的重要组成部分。本文将深入探讨如何在Linux环境下实现多线程的阻塞模式socket编程,以及它的工作原理和应用价值。 首先,理解“阻塞”和“非阻塞...

    linux下的socket多线程通讯

    在linux下用socket的多线程通讯实现一个服务器和多个客户端之间的相互通讯。如果要实现多个和多个客户端通讯,则只需将里面的thread_client编译成多个文件即可。代码绝对是能用的~有什么疑问请留言~希望对大家伙有...

    Linux系统下的多线程编程入门.pdf

    在Linux系统下进行多线程编程是开发高效并发应用程序的关键技术之一。本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程...

    Linux + socket多线程并发服务端+ 聊天室

    本项目“Linux + socket多线程并发服务端+ 聊天室”旨在教授如何利用Linux环境下的socket编程实现一个支持多线程并发的聊天室服务端。下面我们将深入探讨相关知识点。 首先,让我们了解**Socket**。Socket是进程间...

    linux下多线程socket通信(完整源码文件)

    在Linux系统中,多线程Socket通信是一种常见的网络编程方式,尤其在服务器开发中,它能够充分利用多核处理器的优势,提高服务的并发处理能力。本文将深入探讨如何在Linux环境下实现多线程Socket通信,结合给出的标题...

    linux_多线程无阻塞socket.zip_linux_linux socket tcp_tablep1c_tcp+线程_tc

    在Linux系统中,Socket编程是实现网络通信的基础,特别是在多线程环境中,它能提供高效的数据传输和并发处理能力。本教程将深入探讨Linux下的多线程无阻塞Socket编程,涉及TCP协议、线程管理和TCP连接池技术,旨在...

Global site tag (gtag.js) - Google Analytics