socket编程例子,c语言的socket编程例子
大家好,感谢邀请,今天来为大家分享一下socket编程例子的问题,以及和c语言的socket编程例子的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
浅谈Java中如何利用socket进行网络编程(一)
Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。一、建立服务器类 Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。ServerSocket server= new ServerSocket(9998)这条语句创建了一个服务器对象,这个服务器使用9998号端口。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。Socket incoming= server.accept()进而得到输入流和输出流,并进行封装BufferedReader in= new BufferedReader(new InputStreamReader(incoming.getInputStream())); PrintWriter out= new PrintWriter(incoming.getOutputStream(),true);随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。
linux下的 socket编程问题!
第一个问题:
对,是那样的,用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", O_WRONLY| O_TRUNC| O_CREAT, 0755);
while(1){
bzero(buf, BUF_LEN);
if((nread= read(sockfd, buf, BUF_LEN))==-1){
if(errno== EINTR){
continue;
}
else{
printf("readn error:%s\n", strerror(errno));
continue;
}
}
else if(nread== 0){
break;
}
else{
printf("%s\n", buf);
write(file_fd, buf, nread);
}
}
close(file_fd);
}
void sig_chld(int sig){
pid_t pid;
int state;
while((pid= waitpid(-1,&state, WNOHANG))> 0){
printf("child process%d exited.", pid);
}
return;
}
int main(int argc, char**argv)
{
int listenfd, connfd;
socklen_t cliaddrlen;
pid_t childpid;
struct sockaddr_in servaddr, cliaddr;
if((listenfd= socket(AF_INET, SOCK_STREAM, 0))==-1){
printf("socket error:%s\n", strerror(errno));
return 0;
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family= AF_INET;
servaddr.sin_addr.s_addr= htonl(INADDR_ANY);
servaddr.sin_port= htons(SERV_PORT);
if(bind(listenfd,(struct sockaddr*)&servaddr, sizeof(servaddr))==-1){
printf("bind error:%s\n", strerror(errno));
return 0;
}
if(listen(listenfd, MAX_CONN)==-1){
printf("listen error:%s\n", strerror(errno));
return 0;
}
signal(SIGCHLD, sig_chld);
while(1){
cliaddrlen= sizeof(cliaddr);
if((connfd= accept(listenfd,(struct sockaddr*)&cliaddr,&cliaddrlen))==-1){
if(errno== EINTR){
continue;
}
else{
printf("accept error:%s\n", strerror(errno));
continue;
}
}
if((childpid= fork())== 0){
close(listenfd);
str_echo(stdin, connfd);
exit(0);
}
else if(childpid> 0){
close(connfd);
}
else{
printf("fork error!\n");
continue;
}
}
}
client:
#include<stdio.h>
#include<unistd.h>
#include<errno.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#define SERV_ADDR"127.0.0.1"
#define SERV_PORT 5358
#define BUF_LEN 1024
void str_cli(char*path, int sockfd)
{
char sendbuf[BUF_LEN]={0};
int fd, n;
if((fd= open("./pserverb", O_RDONLY))==-1){
printf("%s\n", strerror(errno));
exit(0);
}
while((n= read(fd, sendbuf, BUF_LEN))!= 0){
if(n< 0){
printf("%s\n", strerror(errno));
exit(0);
}
write(sockfd, sendbuf, n);
bzero(sendbuf, BUF_LEN);
}
close(fd);
return;
}
int main(int argc, char**argv)
{
int fd;
struct sockaddr_in servaddr;
fd= socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family= AF_INET;
servaddr.sin_addr.s_addr= inet_addr(SERV_ADDR);
servaddr.sin_port= htons(SERV_PORT);
if(connect(fd,(struct sockaddr*)&servaddr, sizeof(servaddr))==-1){
printf("connect error:%s\n", strerror(errno));
return 0;
}
str_cli(argv[1], fd);
return 0;
}
如何创建一个socket并进行通信
Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。一、建立服务器类 Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。ServerSocket server= new ServerS...
感觉这样的提问没有什么意义
建议看看书,查查资料
文章分享结束,socket编程例子和c语言的socket编程例子的答案你都知道了吗?欢迎再次光临本站哦!