当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

设计一个linux c语言基于TCP的多线程服务器和客户端发送程序

更新:02-12 整理:39baobao.com
字体:

[C语言可以实现中断和多线程这类功能吗]“晕,C语言不是灰常强大,无所不能吗?怎么有人说C语言不能实现 中断 和多线程??”这句话要分两部分来说,首先“晕,C语言不是灰常强大,无所不能吗?”。没有任何一种语言可以无所不能,原...+阅读

客户端#include#include#include#include#include#include#include#define PORT 1234#define MAXDATASIZE 1000void process(FILE *fp,int sockfd);char *getMessage(char *sendline,int len,FILE *fp);int main(int argc,char *argv[]){int fd;struct hostent *he;struct sockaddr_in server;if(argc!=2){printf("Usage: %s\n",argv[0]);exit

(1);}if((he=gethostbyname(argv[1]))==NULL){printf("gethostbyname error.\n");exit

(1);}if((fd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket() error.\n");exit

(1);}bzero(&server,sizeof(server));server.sin_family=AF_INET;server.sin_port=htons(PORT);server.sin_addr=*((struct in_addr *)he->h_addr);if(connect(fd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1){perror("connect() error.\n");exit

(1);}process(stdin,fd);close(fd);}void process(FILE *fp,int sockfd){char sendbuf[MAXDATASIZE];char recvbuf[MAXDATASIZE];int num;printf("Input your name:\n");if(fgets(sendbuf,MAXDATASIZE,fp)==NULL){printf("lease enter your name,now you have exit.\n");return;}send(sockfd,sendbuf,strlen(sendbuf),0);while(getMessage(sendbuf,MAXDATASIZE,fp)!=NULL){send(sockfd,sendbuf,strlen(sendbuf),0);if((num=recv(sockfd,recvbuf,MAXDATASIZE,0))==0){printf("Server no send you any data.\n");return;}recvbuf[num]='\0';printf("Server Message:%s\n",recvbuf);}printf("Exit.\n");}char *getMessage(char *sendline,int len,FILE *fp){printf("Input string to server:\n");return(fgets(sendline,len,fp));}服务器#include#include#include#include#include#include#include#include#include#include#define PORT 1234#define BACKLOG 2#define MAXDATASIZE 1000void process_cli(int connectfd,struct sockaddr_in client);void sig_handler(int s);main(){int opt,listenfd,connectfd;pid_t pid;struct sockaddr_in server;struct sockaddr_in client;int sin_size;struct sigaction act;struct sigaction oact;act.sa_handler=sig_handler;sigemptyset(&act.sa_mask);act.sa_flags=0;if(sigaction(SIGCHLD,&act,&oact)0){close(connectfd);continue;}else if(pid==0){close(listenfd);process_cli(connectfd,client);exit(0);}else{printf("fork error.\n");exit

(1);}}close(listenfd);}void process_cli(int connectfd,struct sockaddr_in client){int i,num;char recvbuf[MAXDATASIZE];char sendbuf[MAXDATASIZE];char cli_name[MAXDATASIZE];printf("You got a connection from %s.\n",inet_ntoa(client.sin_addr));num=recv(connectfd,cli_name,MAXDATASIZE,0);if(num==0){close(connectfd);printf("Client disconnected.\n");return;}cli_name[num]='\0';printf("Client's name is :%s.\n",cli_name);while(num=recv(connectfd,recvbuf,MAXDATASIZE,0)){recvbuf[num]='\0';printf("Received client(%s) message: %s\n",cli_name,recvbuf);/*for(i=0;i0)printf("child %d terminated.\n",pid);return;}

本文地址:https://www.39baobao.com/show/29_40063.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

C语言怎样实现多线程首先你要有控制蛇移动方向的全局变量(定义在main以外因为线程函数也要调用它,每次键盘输入都会修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然后你...

C语言多线程的概念线程线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 多线程:多线程是指程序中包含多个执行...

高分急C语言如何实现多线程有具体方案请提供!你这个问题可是超过200分的啊, 这个往大了说是一个比较复杂的设计方案。 实际上C语言是没有多线程的概念的,但是我们可以通过Task来实现多任务。 简单的说,可以采取以下方案: 定...

c语言多线程编程问题C语言中多线程的实现原理就是线程的原理,本人只了解Linux下面的C,linux下面的线程,不就是进程中的一个控制流么,相对来说代码很简单,但是原理却是很复杂,很难说清,还需要自己详细...

C语言 windows多线程编程点量Http、FTP多线程断点续传下载组件(下载DLL)的开发目的是让用户可以无需关心Http/FTP协议的具体细节,只需要几十行甚至几行代码,便可以实现一个功能完善的Http/FTP下载软件。...

C语言多线程实现线程随机选号程序 以下程序运行后看起来比较有意思,像一个随机选号程序,但不是完全按照问题所说的写的 可供参考,要改很容易//多线程随机选号程序示例#include#include#inclu...

tcl脚本语言编写的socket客户端下面是client.tclproc Socket_Client {host port timeout} { global connected after $timeout {set connected timeout} set sock [socket -async $host $port] fileevent...

用C语言在windows或者Linux上面编写一个多线程程序#include<stdio.h> #include<stdlib.h> #include<windows.h> DWORD WINAPI ThreadProc(LPVOID lpParam) { int *pt=(int*)lpParam; printf("I am tread %d\r\n",*pt); } int m...