linux下的 socket编程问题!

来源:百度知道 编辑:UC知道 时间:2024/06/30 21:25:38
我只会用 socket实现 字符传送! 这个也是最简单的。
1、 但是 如果实现 一个文件的传输,应该怎么实现阿? 是用文件输入输出流打开一个 然后发送字符! 在 服务器端收到字符后 ,再将字符保存在文件里面么?
2、多线程问题: 我应该如何实现多线程字符串数阿? 如果多个客户端同时请求连接! 我是不是在服务器端口每监听到一个,就fork一个子进程来处理? (我的多线程学的很烂,请详细说下)
3、以上例子有没有代码? 供在下参考阿?

第一个问题:

对,是那样的,用open打开文件,用read读取文件,在发送给对方,接收方接收到后,写入文件就可以了。不过在这个过程中最好别用字符串函数,除非你很熟悉。

第二个问题

首先你得去搞清楚什么是线程,什么是进程,fork出来的叫进程,pthread_create出来的才叫线程。服务器有很多种模型(多进程,多线程,select,epoll模型,这个我的blog上有,famdestiny.cublog.cn),不一定要用多进程。

给你写了个代码,自己先看看:

注意,在自己的目录下创建一个叫pserverb的文件,程序会把这个文件复制成test文件。你可以自己根据需要改改

server:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define SERV_PORT 5358
#define MAX_CONN 10
#define BUF_LEN 1024

void str_echo(FILE *fp, int sockfd){
ssize_t nread;
int file_fd;
char buf[BUF_LEN] = {0};

file_fd = open("test&